Compatible con
Java script
SGC Default Protocol y MQTT implementan QoS (Calidad de Servicio) para la entrega de mensajes. Existen 3 tipos diferentes:
Nivel 0: "Como máximo una vez", donde los mensajes se entregan según el mejor esfuerzo de la red TCP/IP subyacente. Puede producirse pérdida o duplicación de mensajes. Este nivel podría usarse, por ejemplo, con datos de sensores ambientales donde no importa si se pierde una lectura individual, ya que la siguiente se publicará poco después.
Nivel 1: "Al menos una vez", donde se garantiza la llegada de los mensajes pero pueden producirse duplicados.
Nivel 2: «Exactamente una vez», donde se garantiza que los mensajes llegan exactamente una vez. Este nivel podría usarse, por ejemplo, en sistemas de facturación donde los mensajes duplicados o perdidos podrían generar cargos incorrectos.
El mensaje se entrega conforme al mayor esfuerzo de la red TCP/IP subyacente. No se espera respuesta ni se definen semánticas de reintento en el protocolo. El mensaje llega al servidor una vez o no llega en absoluto.
La tabla siguiente muestra el flujo del protocolo con nivel de QoS 0.
| Cliente | Mensaje y dirección | Servidor |
|---|---|---|
| QoS = 0 | PUBLISH ----------> |
Acción: Publicar un mensaje a los suscriptores |
La recepción de un mensaje por parte del servidor es confirmada mediante un mensaje de ACKNOWLEDGEMENT. Si se produce un fallo identificado en el enlace de comunicaciones, en el dispositivo emisor, o si el mensaje de confirmación no se recibe en el período de tiempo especificado, el remitente reenvía el mensaje. El mensaje llega al servidor al menos una vez.
Un mensaje con nivel QoS 1 tiene un ID de mensaje en el mensaje.
La tabla a continuación muestra el flujo del protocolo QoS nivel 1.
| Cliente | Mensaje y dirección | Servidor |
|---|---|---|
| QoS
= 1 Message ID = x Acción: Almacenar mensaje |
PUBLISH ----------> |
Acciones:
|
| Action: Descartar mensaje | CONFIRMACIÓN<---------- |
Si el cliente no recibe un mensaje de RECONOCIMIENTO (ya sea dentro de un período de tiempo definido en la aplicación, o si se detecta un fallo y la sesión de comunicación se reinicia), el cliente puede reenviar el mensaje PUBLISH.
Los flujos de protocolo adicionales por encima del nivel QoS 1 garantizan que no se entreguen mensajes duplicados a la aplicación receptora. Este es el nivel más alto de entrega, para usar cuando los mensajes duplicados no son aceptables. Se produce un aumento en el tráfico de red, pero generalmente es aceptable debido a la importancia del contenido del mensaje.
Un mensaje con nivel QoS 2 tiene un ID de mensaje en el mensaje.
La tabla siguiente muestra el flujo del protocolo QoS de nivel 2. Hay dos semánticas disponibles sobre cómo debe gestionar el flujo PUBLISH el destinatario.
| Cliente | Mensaje y dirección | Servidor |
|---|---|---|
| QoS
= 2 Message ID = x Acción: Almacenar mensaje |
PUBLISH ----------> |
Acción: Almacenar mensaje |
PUBREC <---------- |
ID de mensaje = x | |
| ID de mensaje = x | PUBREL ----------> |
Acciones:
|
| Action: Descartar mensaje | ACUSE DE RECIBO <---------- |
ID de mensaje = x |
Si se detecta un fallo, o tras un período de tiempo definido, el flujo del protocolo se reintenta desde el último mensaje de protocolo no confirmado. Los flujos de protocolo adicionales garantizan que el mensaje se entregue a los suscriptores exactamente una vez.