HomeBlog MQTT Mensajes retenidos

MQTT Mensajes retenidos: Lo que necesitas saber

por Ponlakshmi


retained messages

Cuando un editor publica un mensaje a un sujeto al que nadie ha suscrito, el mensaje es simplemente descartado por elMQTT Broker. Al configurar la bandera de mensaje retenida, el editor puede informar al corredor para mantener el último mensaje en que Tema. Esta característica le permite almacenar un solo mensaje porMQTT Temay enviarlo a todos los suscriptores actuales y futuros. Para guardar un mensaje retenido, simplemente establecer una bandera retenida al publicarla al corredor. En ese momento, el mensaje se entrega a todos los suscriptores actuales como siempre, así como cualquier dispositivo futuro que se suscriba a ese tema. En este post, proporcionaremos un vista general de esta característica y explíquelo con un ejemplo. Echemos un vistazo a esto ahora mismo.

Introducción

Cuando escuchamos la frase mensajes retenidos, inmediatamente pensamos en los mensajes que se han almacenado. ÉstosMQTTMensajes retenidos se definen en elMQTT 3.1.1 especificacióny son creados por publicar un mensaje con la bandera retenida que se establece en 'True.' El corredor almacena el mensaje retenido más recientemente, así como elMQTT QoSpara ese tema. Cuando se compara con MQTT v3.1.1, proporciona un Retain Manejo de campo en la opción de suscripción y hace una división más en profundidad de si enviar un retenido mensaje cuando el suscripción se establece enMQTT v5.0. Como se indicó anteriormente, se entrega un mensaje retenido a cualquier cliente suscrito actualmente de la misma manera que un mensaje normal es, y también se envía automáticamente a nuevos clientes que se suscriben a ese tema. Sólo uno mensaje retenido se puede guardar por tema, cualquier mensaje retenido futuro reemplazará al retenido existente mensajes.

Por ejemplo,

En este ejemplo, el sensor envía al corredor su valor actual junto con un verdadero mensaje retenido. Esto mensaje es inmediatamente recibidos porMQTT clientque está en línea. El corredor almacena el mensaje y lo entrega al segundo cliente una vez que viene en línea como la bandera retenida se establece a la verdad. Como resultado de esta característica, cuando el cliente offline viene en línea, se actualiza con el valor sensor más reciente.

Retener mensajes con MQTT es un ejemplo de cómo se puede hacer.

Como mensaje inicial de configuración

Después de que un cliente se suscribe a un tema, MQTT retiene mensajes se envían al cliente. Puedes publicar mensaje de configuración con el Juego de bandera RETAIN, si desea que todos los clientes que se suscriben a un tema reciban el mensaje retenido MQTT inmediatamente después suscripción. Cuando se publica un nuevo mensaje de configuración, los clientes que lo suscriben reciben actualizaciones. configuración también.


Como mensaje del último estado conocido

Los dispositivos pueden guardar mensajes estableciendo la bandera RETAIN en mensajes de estado actual. Cuando aplicaciones conectar o reconectar, pueden suscribirse a este tema y recibir el estado reportado más reciente inmediatamente después de hacerlo. Pueden evitar esperar para el siguiente mensaje del dispositivo para ver el estado actual de esta manera.

Revisaremos cómo configurar y eliminar la función de mensajes retenidos MQTT en las secciones siguientes.

Permitir el mensaje retenido

Un mensaje de retención es un mensaje de publicación estándar MQTT con la bandera retenida habilitada. Cuando un editor envía datos al corredor, También envía información adicional además del tema y el mensaje, ya que es probablemente consciente. ElPUBLISH packetes el nombre de este paquete. Han proporcionado un campo en el encabezado fijo en este paquete para establecer el retén bandera a 1 o 0. Se establecerá a 0 por defecto, indicando que el mensaje no será guardado. Sin embargo, si lo fijamos a 1, elMQTT Brokeralmacenará el mensaje y su correspondienteCalidad del nivel de serviciopara ese tema, cuando recibe el paquete.

Desactivar el mensaje retenido

¿Puede averiguar cómo deshabilitar la función de retención para un tema específico? No es tan simple como enviar un mensaje con el retén bandera fijada a 0, ya que esa es la condición predeterminada. Enviar un mensaje vacío al mismo tema con el retén bandera fijada a 1 es el la forma correcta de hacerlo. Sí, esto puede parecer contra intuitivo, pero se hizo a propósito para evitar conflictos con cualquier momento real publicar sobre el mismo tema que no tenía la bandera de retención fijada a 1.


La característica de mensaje retenido MQTT es útil para preservar el estado más reciente de un objeto, que es especialmente útil cuando el estado no cambia con frecuencia. La calidad de la configuración del servicio no tiene impacto en los mensajes que se mantienen.

Para obtener más información sobre el protocolo,