Duda sobre los suscribe


#1

Cuando me conecto al broker y envío un suscribe entiendo que recibiré los topics que lleguen al broker
mientras estoy conectado.y cumplan los requisitos de ese suscribe.
Mi duda es: hago una conexión con un dispositivo. Apago el dispositivo y le vuelvo a encender, entonces debo
ejecutar los comandos de conexión y de OPEN, ¿debo subir al broker los suscribe nuevamente o no es necesario?.
Por otra parte si al apagar el dispositivo e interrumpir ya desconecto ¿para que vale el comando DISCONNECT?


#2

Buenas,

Si al conectar usas cleanSession=false (cleanSession=0), entonces no será necesario que resuscribas los topics: estos se mantienen asociados a esa sesión tal cual fueron mandadas por cada SUBSCRIBE.

Si lanzas un SUBSCRIBE con una conexión habiendo hecho login con cleanSession=false, es como si mandases dos SUBSCRIBE para lo mismo. El segundo se ignoraría.

Si conectas con cleanSession=true (cleanSession=1), harás que todo estado previo de la sesión asociada al clientId usado sea eliminado, incluyendo los topics suscritos con SUBSCRIBE. Ver:

http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/cos01/mqtt-v3.1.1-cos01.html ( 3.1.2.4 Clean session )

Es decir, es necesario si usas cleanSession=true. No es necesario si conectas con cleanSession=false o pretendes suscribir lo mismo pero reemplazando con un nuevo QoS.

Con respecto al apagado: debes usar siempre el DISCONNECT para indicar desconexión controlada. Si un dispositivo desconecta sin enviar DISCONNECT, se considera que ha perdido la conexión y por tanto se disparan los mensajes LWT que tenga configurados:

Ver 3.1.2.5 Will Flag en http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/cos01/mqtt-v3.1.1-cos01.html

Un saludo,