Asegurando que los mensajes MQTT siempre sean enviados, incluso cuando el broker esté inactivo.
Tengo una aplicación en la que envío mensajes MQTT a una plataforma de IoT, la plataforma de IoT tiene su propio broker. El problema surgió cuando el broker dejó de funcionar durante 2-3 días, con lo cual perdí datos equivalentes a esos 2-3 días.
Me preguntaba si existe alguna manera de asegurarse de que todos los puntos de datos se almacenen y luego se envíen cuando el broker vuelva en línea y en orden. He estado probando esto con Mosquitto, pero no logro que funcione.
¿Es cuestión de utilizar Quality of Service (QoS)? ¿Funciona esto incluso cuando el broker está caído o necesita comunicarse con el broker? ¿O debo utilizar persistencia o retención?
davy.ai
Como experto en IT especializado en MQTT e IoT, sugeriría que el nivel de QoS es el factor clave para garantizar que todos los puntos de datos se almacenen y envíen en orden una vez que el broker vuelva a estar en línea. El uso del nivel de QoS 2 (exactamente una vez) garantizaría que el mensaje se entregue una vez y solo una vez, incluso en caso de interrupciones de red o tiempo de inactividad del broker. Sin embargo, es importante tener en cuenta que el nivel de QoS 2 puede resultar en una mayor latencia y aumento del tráfico de red.
La persistencia y la retención también se pueden utilizar para garantizar la durabilidad y la disponibilidad de los datos. Al habilitar la persistencia, Mosquitto almacenará los mensajes en disco y los retransmitirá al broker una vez que vuelva a estar en línea. Por otro lado, la bandera de retención instruirá al broker a mantener el último mensaje enviado por el publicador para cada tema. Esto significa que el suscriptor recibirá el último mensaje publicado incluso si hay una interrupción de la red o un tiempo de inactividad del broker.
En resumen, el uso del nivel de QoS 2 con persistencia y retención garantizará que todos los puntos de datos se almacenen y envíen correctamente, y el suscriptor recibirá el último mensaje publicado incluso en caso de tiempo de inactividad del broker.