MQTT Quel est le but ou l'usage du Testament?

je passe sûrement à côté de quelque chose sur le fonctionnement de l'ensemble du protocole MQTT, car je ne peux pas saisir le schéma d'utilisation de Testament De La Dernière Volonté messages: quel est leur but?

Un exemple que je vois souvent est au sujet d'informer qu'un dispositif est allé hors ligne. Cela n'a pas beaucoup de sens pour moi, car il est évident que si un périphérique ne publie pas de données il peut être hors ligne ou il pourrait y avoir des problèmes de réseau.

ainsi, quelles sont les utilisations pratiques de la LWT? Ce qu'il a été inventé?

24
demandé sur Alessandro Da Rugna 2013-06-24 12:17:53

3 réponses

les messages LWT ne se soucient pas vraiment de détecter si un client est déconnecté ou non (cette tâche est gérée par des messages keepAlive). LWT les messages sont sur le que se passe-t-il une fois que le client est déconnecté?.

L'analogie est celle d'un réel dernière volonté: Si une personne meurt, elle peut formuler un testament, dans lequel elle déclare que des mesures devraient être prises après qu'elle a disparu. Un exécuteur tiendra compte de ces souhaits et les exécutera sur en son nom. L'analogie dans le monde MQTT est qu'un client peut formuler un testament, dans lequel il déclare quel message devrait être envoyé en son nom par le courtier, après qu'il est allé hors ligne.

Un exemple fictif:

j'ai un capteur qui envoie des données cruciales, mais très rarement. Il a formulé une dernière déclaration dans la forme de [thème: "/node/parti-hors ligne", message: ':id'], avec :id un identifiant unique pour le capteur. J'ai aussi un abonné d'urgence pour le thème 'node / gone-offline', qui enverra un SMS à mon téléphone chaque fois qu'un message est publié sur ce canal.

pendant le fonctionnement normal, le capteur maintient la connexion avec le MQTT-broker ouverte en envoyant des messages keepAlive périodiques intercalés avec les lectures réelles du capteur. Si le capteur est déconnecté, la connexion avec le courtier s'éteindra, en raison du manque de keepAlives.

C'est là que LWT entre en jeu: si non LWT est spécifié, le courtier s'en fiche et ferme simplement la connexion. Dans notre cas, cependant, le courtier exécutera le dernier testament du capteur et publiera le message LWT '/node/gone-offline: :id'. Le message sera alors consommé à mon abonné d'urgence et je serai informé de l'identification du capteur via SMS afin que je puisse vérifier ce qu'il se passe.

En bref:

au lieu de simplement fermer la connexion après qu'un client est parti les messages LWT hors ligne peuvent être exploités pour définir un message à publier par le courtier au nom du client, puisque le client est hors ligne et ne peut plus publier.

60
répondu lowi 2013-06-29 22:30:43

ce n'est pas parce qu'un périphérique ne publie pas qu'il n'est pas en ligne ou qu'il y a un problème de réseau.

Prenez par exemple un capteur qui surveille une valeur qui ne change que très rarement, une bonne conception dit que le capteur ne devrait publier les changements que pour aider à réduire l'utilisation de la bande passante car publier périodiquement la même valeur est un gaspillage. Si la valeur est publiée comme valeur conservée alors tout nouvel abonné obtiendra toujours la valeur actuelle sans avoir à attendre la sensor valeur à changer et il publie à nouveau.

dans ce cas, le LWT est utilisé pour la publication lorsque le capteur tombe en panne (ou qu'il y a un problème de réseau) de sorte que nous connaissons le problème dès que le client reste en vie.

9
répondu hardillb 2013-06-24 08:26:50

un article détaillé sur les messages du testament est disponible dans la série de billets du Blog MQTT Essentials:http://www.hivemq.com/mqtt-essentials-part-9-last-will-and-testament/.

Pour résumer le post de blog:

Dernier Testament et Testament la fonctionnalité est utilisée dans MQTT pour aviser les autres clients d'un client déconnecté de façon ingrate.

MQTT est souvent utilisé dans les scénarios où les réseaux peu fiables sont très fréquents. Par conséquent, il est supposé que certains clients se déconnecter ungracefully de temps à autre, parce qu'ils ont perdu la connexion, la batterie est vide ou tout autre cas imaginables. Il serait bon de savoir si un client connecté s'est déconnecté avec élégance (ce qui signifie avec un MQTT déconnecter message) ou non, afin de prendre les mesures appropriées.

7
répondu Dominik Obermaier 2015-03-20 00:44:59