¿Hay alguna manera de preservar el nivel de QoS de MQTT hasta que llegue al cliente?

9

MQTT permite a los remitentes establecer un nivel de calidad de servicio (QoS), que proporciona ciertas garantías sobre si se recibirá un mensaje (y si se permiten duplicados). Este artículo de HiveMQ destaca el problema de la degradación , donde un cliente con un nivel de QoS más bajo no recibirá el mensaje con las garantías que el remitente solicitó:

Como ya se dijo, los flujos de QoS entre un cliente de publicación y suscripción son dos cosas diferentes, así como la QoS puede ser diferente. Eso significa que el nivel de QoS puede ser diferente del cliente A, que publica un mensaje, y el cliente B, que recibe el mensaje publicado. Entre el remitente y el intermediario, el remitente define la calidad del servicio. Cuando el agente envía el mensaje a todos los suscriptores, se utiliza la QoS de la suscripción del cliente B.

¿MQTT proporciona una manera de indicar que esta degradación no es aceptable y que el mensaje debe entregarse utilizando la QoS solicitada por el remitente original? ¿Es la única opción para asegurarse de que tanto el emisor como el receptor tengan la configuración de QoS deseada antes de transmitir el mensaje?

Aurora0001
fuente

Respuestas:

8

Una cosa para recordar cuando se trabaja con MQTT es que "tanto los suscriptores como los editores se consideran clientes MQTT".

Como se dijo, la calidad de servicio establecida durante la publicación está completamente relacionada con el corredor (B), no con los otros clientes. Por lo tanto, para asegurarse de que el suscriptor (S) recibe todo lo que publica (P) publica, es necesario usar QoS 1.

Veamos los casos: P: envía con QoS 0, lo que significa que cada mensaje estará en B al menos una vez (una vez o cero). En este caso, si S se suscribe a B con QoS 0, no hay garantía de que incluso cuando el intermediario (B) reciba un mensaje que finalmente llegue a S. QoS 1 - S definitivamente recibirá QoS 2 - S no recibirá múltiples mensajes mientras el agente puede

Si hacemos lo mismo con otras QoS. Conoceremos que QoS1 para suscriptores funciona bien con todos los niveles, ya que QoS 1 es el superconjunto de todos.


MQTT no proporciona ninguna indicación para lo mismo, pero podemos lograr la QoS del remitente utilizando QoS 1 mientras se suscribe.

bravokeyl
fuente
4

Los niveles de QoS 1 o 2 solo aseguran que el mensaje publicado llegue al intermediario. El suscriptor QoS 1 o 2 asegura al intermediario que se recibió el mensaje.

Publicar con 1 o 2 no significa que alguien esté escuchando.

¿Cuál es su caso de uso?

Fixitchris
fuente
3
No haga preguntas en las respuestas. Si algo no está claro, deje un comentario primero.
Bence Kaulics
Tengo curiosidad acerca de cualquier situación en la que pueda tener un sensor que envía datos al intermediario de mensajes y luego se reenvía a una computadora o algún otro procesador donde es vital que se mantengan las garantías de QoS.
Aurora0001