HomeBlog Fundamentos MQTT

Persistent Sessions and Message Queuing – MQTT Fundamentals

por Ponlakshmi


MQTT Persistent session

¿Sabías que después de que un cliente se desconecta, el corredor de MQTT puede almacenar nuevos mensajes para ese cliente? Los mensajes serán enviados tan rápido como el cliente vuelva a conectarse.MQTT Persistente sesión " mensaje queuinges el nombre de esta característica enMQTT. En este post, describiré cómo es actúa. Veamos esto más de cerca.

MQTT Persistent Sessions or Clean Session

MQTTPersistentes períodos de sesionescomo se ha indicado anteriormente, el intervalo de expiración especifica cuánto tiempo debe mantenerse el período de sesiones después de un desconectar. Considere el siguiente escenario: Supongamos que tienes dosMQTT clientesque son ambos conectado a unMQTT broker. Un cliente MQTT está publicando un tema, mientras que el otro lo suscribe. Si el cliente de suscripción desconexión de los bróker inesperadamente, no recibirá ningún mensaje publicado a ese tema hasta que vuelva a conectarse.


Al conectarse con el broker, utilizamos las banderas Persistent Session o Clean Session para resolver esto problema. Cuando un cliente se conecta al corredor, el cliente tiene la opción de solicitar una sesión persistente. El broker hará un seguimiento de la información del cliente, así como de los temas a los que está suscrito. El corredor Lo haré. transmitir todos los mensajes no entregados al cliente cuando el cliente vuelva a conectarse después de una desconexión.

Establecer una sesión limpia

Cuando un cliente se conecta al corredor, el cliente puede crear una sesión persistente estableciendo el CleanSession flag to False. Este ajuste se establece en True por defecto. Echemos un vistazo a lo que una sesión persistente almacena.


  • La existencia de una sesión (incluso sin suscripciones).
  • Todas las suscripciones del cliente.
  • El cliente todavía no ha confirmado todos los mensajes en 1 o 2 flujo enCalidad de los niveles de servicio (QoS).
  • Todo nuevoQoS 1o 2 mensajes que el cliente perdió durante la desconexión.
  • TodosQoS 2los mensajes recibidos de los clientes todavía no se aceptan plenamente.

¿Cuándo debe usarse una sesión limpia?

Cuando un cliente necesita recibir todos (o / y casi todos) de los mensajes de un tema al que tiene suscrito y el Internet no es confiable, es esencial utilizar una sesión permanente.

¿Cómo se manejan las acciones del lado cliente mediante sesiones persistentes?

Veamos cómo manejar las sesiones persistentes del lado cliente. Si quieres una sesión de MQTT persistente y díselo el corredor que quiero período de sesiones persistente en elPaquete CONNACK, hay una pequeña bandera llamada sesión persistente y el corredor le dice como cliente si el corredor te recuerda como cliente o si el corredor cree que estás conectado para el primer tiempo. Y esto le proporciona una manera conveniente en el lado del cliente para determinar si necesita volver a suscribirse a suTemas del MQTTo si el corredor ya tiene información sobre usted. Así que esto es algo en lo que mirar, y la mayoría de las bibliotecas te permite comprobar sesiones limpias paracrear MQTTclientsque son resistentes.

Mensaje Queuing

Luego hay un mensaje queruing, que es único al MQTT. Utilizar estos mensajes puede ser consultado por cliente. Sólo para clientes de sesión persistentes, puede utilizar mensajes de búsqueda. Si tiene una suscripción activa y una cliente de sesión persistente que está desconectado del corredor, el corredor colará todoscalidad de servicio (QoS 1 o 2)mensajes que perdiste mientras desconectaste. Esto significa que si estás desconectado por un tiempo y luego reconectar, el corredor recibirá mensajes que te perdiste, así que incluso si estás conectado en el lado cliente, obtendrás el más actualizado información y no faltará un mensaje. Así que esto es realmente genial, pero necesitas una sesión persistente aquí y necesitas usar el calidad de servicio uno o dos mensajes aquí. Tenga en cuenta que los mensajes con uncalidad de servicio de ceronunca se apagan.


Ya hemos discutido sesiones persistentes y búsqueda de mensajes. Es posible que si su corredor de MQTT no tiene expiración sesiones, sesiones persistentes o colas, usted es susceptible a la negación de ataques de servicio. Así que, si eres trabajando en un proyecto profesional, asegúrese de tener un MQTT que soporta todas las operaciones importantes y configuraciones.

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