🔥 Firehook

Blog · mqtt

MQTT retained et Last Will : roles et bonnes pratiques

Comprendre les messages retenus et le Last Will pour rendre un systeme MQTT plus fiable.

Pilier broker glossy isometrique avec devices connectes et points lumineux publish/subscribe

Les messages retenus simplement

Un message retenu est la memoire du broker sur un topic. Quand un abonne se connecte, il recoit immediatement la derniere valeur, meme si l’emetteur est hors ligne.

C’est ideal pour les topics d’etat : statut d’un appareil, configuration, derniere mesure. Les tableaux de bord paraissent instantanes.

Quand utiliser retained

Utilisez retained pour l’etat qui change peu : mode, disponibilite, dernier statut. Cela donne une vision stable du systeme.

Evitez de retenir de la telemetrie haute frequence. La valeur retenue peut etre perimee et induire en erreur.

Effacer une valeur retenue

Pour supprimer une valeur retenue, publiez un payload vide avec le flag retained. Le broker efface alors la valeur.

C’est utile quand un appareil est retire ou quand le topic ne represente plus un etat valide.

Last Will and Testament (LWT)

Le Last Will est un message publie par le broker si un client se deconnecte brutalement. C’est un filet de securite qui signale “cet appareil a disparu”.

Le LWT est essentiel pour la presence. Sans lui, on ne sait pas si l’appareil est offline ou simplement silencieux.

Retained + LWT ensemble

Un pattern courant : publier un statut “online” retained et definir un LWT qui publie “offline”. Quand l’appareil tombe, le broker envoie offline.

Les abonnes ont ainsi une vision fiable de la presence, meme en cas de deconnexion imprevisible.

Design des topics

Separez les topics d’etat des topics d’evenements. Les premiers sont stables et representent la valeur courante ; les seconds sont des evenements ponctuels.

Par exemple, `/devices/42/state` peut etre retained, alors que `/devices/42/events` ne devrait pas l’etre.

Pieges operationnels

Les valeurs retenues peuvent rester obsoletes si les appareils disparaissent. Utilisez le LWT ou des expirations cote consommateur.

Documentez quels topics sont retained pour eviter les malentendus chez les equipes.

FAQ

Les messages retenus sont-ils conserves indéfiniment ?
Ils restent jusqu’a remplacement ou suppression, selon la configuration du broker.
Le LWT se declenche-t-il sur une deconnexion propre ?
Non, uniquement sur une deconnexion inattendue.
Le LWT peut-il etre retained ?
Oui, pour que les nouveaux abonnes voient l’etatat offline.
Faut-il retenir la telemetrie ?
En general non, sauf besoin explicite de la derniere valeur.
Ou placer les topics retained ?
Dans un namespace clair d’etat pour eviter la confusion.