Mensajes enviados al suscribir


#1

Hola, estoy teniendo el siguiente problema:

  • Me conecto con el flag Clean Session = True
  • Suscribo un tópico.
  • Pese a que tengo stash deshabilitado y no me aparecen “unconfirmed” messages, me llegan mensajes que alguna vez han pasado por vuestro servidor.
  • Si hago una suscripción con # me llegan mensajes para varios tópicos que hace mucho tiempo no utilizo. La suscripción con # la hago desde una consola de comando, pero al hacerlo, los mensajes viejos me llegan a dicha consola, pero también a los dispositivos que ya están subscriptos a ese tópico generándome los problemas que se imaginarán porque son mensajes viejos.

Como lo puedo resolver?


#2

Buenas Carlos,

Esto es exáctamente lo mismo que el hilo que has abierto aquí: Como borrar mensajes retenidos

Estás recibiendo notificaciones de mensajes retenidos (mensajes publicados en topics que encaja con la subscripción que hacéis, en este caso #, y que tienen el flag retained=true).

Usar cleanSession=true no funcionará que esos mensajes no forman parte de la sesión:

> http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html
Retained messages do not form part of the Session state in the Server, they MUST NOT be deleted when the Session ends [MQTT-3.1.2.7].

En cuanto puedas, revisa esos mensajes que recibes cuando os subscribís con #, y comprobad tanto el topic como el flag retained del publish recibido.

Para eliminarlos, tenéis que enviar un mensaje con retainted=true y contenido vacio, al topic que queráis limpiar.

> http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html
A PUBLISH Packet with a RETAIN flag set to 1 and a payload containing zero bytes will be processed as normal by the Server and sent to Clients with a subscription matching the topic name. Additionally any existing retained message with the same topic name MUST be removed and any future subscribers for the topic will not receive a retained message [MQTT-3.3.1-10].

En cuanto podáis, revisad con detenimiento la sección “3.3.1.3 RETAIN” para conocer más sobre este flag y su funcionamiento en:

http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html

Un saludo,


#3

Gracias!.
Lo resolví tal como recomiendan, enviando un mensaje con retained=true y contenido nulo.
Desde la web usando la opción “Publish” no funcionó, ya que dejando el campo “mensaje” vacío, igual me mandaba un contenido de varios espacios en blanco (b’ '), pero con un script Python (paho) lo pude hacer.
Saludos!
Carlos