Integración con RabbitMQ

GpsGate se integra con RabbitMQ. Esto te permite enviar los datos de seguimiento de los rastreadores y eventos en vivo a una instalación de RabbitMQ y consumirlos como desees.

RabbitMQ es un software de intermediación de mensajes de código abierto que originalmente implementó el Protocolo Avanzado de Encolado de Mensajes y desde entonces se ha ampliado con una arquitectura de complementos para admitir el Protocolo de Mensajería Orientada a Texto en Streaming, Transporte de Telemetría MQ y otros protocolos. 

Configuración

1. Inicia sesión en Administración del sitio (legacy) y navega a Plugins.

2. Haz clic en Obtener más plugins e instala RabbitMQ

3. Ahora navega a Integraciones, selecciona RabbitMQ y haz clic en Agregar

Este es un ejemplo de cómo completar este formulario. Es necesario configurar manualmente la cola y la clave de enrutamiento en RabbitMQ.

mceclip3.png

4. Completa todos los campos y guarda la configuración. 

5. Haz clic en Probar para verificar si tu configuración es correcta, deberías ver este mensaje si todo está correcto:

mceclip1.png

6. Una vez guardado y probado, navega a Administrar aplicaciones.

7. Habilita RabbitMQ, así como la configuración que has creado.

Screenshot 2024-09-17 at 15.48.39.png

8. Haz clic en Guardar.

Mensajes de Seguimiento

  1. Inicia sesión en la aplicación móvil del Rastreador de Activos en la que has habilitado RabbitMQ.
  2. Haz clic en Menú PrincipalAdmin > Roles. Se abrirá la ventana de Roles.
  3. Haz clic en Crear copia de un rol ya existente y dale un nuevo nombre, como RabbitMQ.
  4. Selecciona todos los usuarios para los que deseas habilitar el envío de datos de seguimiento a tu instalación de RabbitMQ.
  5. Habilita el privilegio _RabbitMQ y la configuración creada en Administración del sitio (legacy), en este caso 'RabbitMQ Server 1'.
  6. Haz clic en Guardar.

Mensaje de Evento

  1. Inicia sesión en la aplicación del Rastreador de Activos en la que has habilitado RabbitMQ.
  2. Haz clic en Menú PrincipalAdmin > Regla de Evento. Se abrirá la ventana de lista de Reglas de Evento.
  3. Crea una nueva Regla de Evento o modifica una existente. Acerca de las Reglas de Evento.
  4. En la sección de Notificadores, agrega un nuevo Notificador de tipo RabbitMQ
  5. Selecciona la configuración de RabbitMQ a la que deseas enviar los mensajes de Evento
  6. Opcionalmente, agrega un Valor. Esto puede ser algún texto y/o diferentes valores de señal seleccionados del menú desplegable
  7. Selecciona cuándo Notificar: Inicio, Fin, Inicio y Fin, o Siempre
  8. Guarda la Regla de Evento

Tipo de Datos

Hay 2 tipos de datos soportados:

  • Seguimientos: Datos de seguimiento de activos que incluyen la posición actual y todas las señales del activo (incluyendo script de campo y acumuladores)
  • Eventos: Eventos en vivo usando un Notificador de Regla de Evento RabbitMQ

Tipo de Serializador

Soportamos dos tipos de serialización: JSON y Protobuf. Se recomienda Protobuf ya que sus datos son mucho más pequeños, lo que hará que los datos se envíen más rápido.

Definición JSON para mensajes de Seguimiento:

 
{
    "type": "object",
    "properties": {
        "imei": {
            "required": true,
            "type": [
                "string",
                "null"
            ]
        },
        "userID": {
            "required": true,
            "type": "integer"
        },
        "utc": {
            "required": true,
            "type": "integer"
        },
        "valid": {
            "required": true,
            "type": "boolean"
        },
        "heading": {
            "required": true,
            "type": "number"
        },
        "speed": {
            "required": true,
            "type": "number"
        },
        "lng": {
            "required": true,
            "type": "number"
        },
        "lat": {
            "required": true,
            "type": "number"
        },
        "alt": {
            "required": true,
            "type": "number"
        },
        "fields": {
            "required": true,
            "type": [
                "object",
                "null"
            ],
            "additionalProperties": {
                "type": [
                    "object",
                    "null"
                ],
                "properties": {}
            }
        }
    }
}


Definición de Protobuf para mensajes de Track:

 
syntax = "proto3";
option csharp_namespace = "GpsGate.RabbitMQ.API.Protobuf";
option optimize_for = SPEED;
package google.protobuf;

message TrackMessage {

  string imei = 1;
  int64 utc = 2;
  bool Valid = 3;
  double Heading = 4;
  double Speed = 5;
  double lng = 6;
  double lat = 7;
  double alt = 8;
  map<string, FieldData> fields = 9;
  int32 userId = 10;
}
message FieldData {
  oneof kind {
    int64 DateTime_value = 1;
    double double_value = 2;
    string string_value = 3;
    bool bool_value = 4;
    int32 int32_value = 5;
  }
}

Definición Json para mensajes de Evento:

 
{
    "type": "object",
    "properties": {
        "id": {
            "required": true,
            "type": "integer"
        },
        "userID": {
            "required": true,
            "type": "integer"
        },
        "RuleName": {
            "required": true,
            "type": [
                "string",
                "null"
            ]
        },
        "UserName": {
            "required": true,
            "type": [
                "string",
                "null"
            ]
        },
        "Namespace": {
            "required": true,
            "type": [
                "string",
                "null"
            ]
        },
        "Value": {
            "required": true,
            "type": [
                "string",
                "null"
            ]
        },
        "State": {
            "required": true,
            "type": [
                "string",
                "null"
            ]
        },
        "lng": {
            "required": true,
            "type": "number"
        },
        "lat": {
            "required": true,
            "type": "number"
        },
        "alt": {
            "required": true,
            "type": "number"
        },
        "utc": {
            "required": true,
            "type": "integer"
        }
    }
}

Definición de Protobuf para mensajes de Evento:

 
syntax = "proto3";
option csharp_namespace = "GpsGate.RabbitMQ.API.Protobuf";
option optimize_for = SPEED;
package google.protobuf;

message EventMessage {

    int64 id = 1;
    string RuleName = 2;
    string UserName = 3;
    string Namespace = 4;
    string Value = 5;
    string State = 6;
    double lng = 7;
    double lat = 8;
    double alt = 9;
    int64 utc = 10;
    int32 userId = 11;
}

Independientemente de la serialización, UTC es la marca de tiempo de la pista en milisegundos desde el Unix Epoch y la Velocidad está en m/s.

Detalles técnicos

RabbitMQ está configurado para pasar por un RabbitMQ Exchange de tipo topic. Lee más aquí: Intercambio de temas de RabbitMQ. Esto te permite crear múltiples colas que serán enrutadas usando la Clave de Intercambio.

El plugin de RabbitMQ utiliza el protocolo AMQP y actúa como un cliente de RabbitMQ. 

Clave de Enrutamiento

La Clave de Enrutamiento es una tabla de plantillas, lo que significa que puedes usar varios datos específicos del usuario para componer la Clave de Enrutamiento. Actualmente, soportamos tres plantillas:

  1. username - el nombre de usuario del usuario
  2. name - el nombre del usuario
  3. imei - el IMEI del rastreador que reporta

Aquí tienes algunos ejemplos de cómo usarlo:

  • Tracks.[imei]
  • User.[username]
  • [imei]