Integración de RabbitMQ

GpsGate se integra con RabbitMQ. Esto te permite reenviar 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. Navega ahora a Integraciones, selecciona RabbitMQ y haz clic en Agregar

mceclip2.png

Este es un ejemplo de cómo completar este formulario:

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 es 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 reenví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. Inicie sesión en la aplicación Rastreador de Activos en la que ha habilitado RabbitMQ.
  2. Haga clic en Menú Principal > Admin > Regla de Evento. Se abrirá la ventana de la lista de Reglas de Evento.
  3. Cree una nueva Regla de Evento o modifique una existente. Acerca de las Reglas de Evento.
  4. En la sección Notificador, agregue un nuevo Notificador de tipo RabbitMQ
  5. Seleccione la configuración de RabbitMQ a la que desea enviar los mensajes de Evento
  6. Opcionalmente agregue un Valor. Esto puede ser algún texto y/o diferentes valores de señal seleccionados del menú desplegable
  7. Seleccione cuándo Notificar: Inicio, Fin, Inicio y Fin, o Siempre
  8. Guarde la Regla de Evento

Tipo de Datos

Hay 2 tipos de datos compatibles:

  • Rastreos: Datos de rastreo 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 RabbitMQ de Regla de Evento

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 transmitan más rápido.

Definición JSON para mensajes de Rastreo:

 
{

     "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 seguimiento:

 
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 de Json para mensajes de eventos:

 
{

     "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

El RabbitMQ está configurado para pasar por un RabbitMQ Exchange de tipo topic. Lea más aquí: RabbitMQ topic exchange. Esto le 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 puede 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í hay algunos ejemplos de cómo usarlo:

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