Abonnieren Sie die MQTT-Geburt und werden Themen? (emqttd)

11

Ich verwende emqttd ( emqtt.io ). Ich möchte Clients überwachen, die eine Verbindung zu einem separaten Prozess herstellen und trennen, der ein Systemthema abonniert, in dem Geburts- und Willensnachrichten veröffentlicht werden. Was ist der richtige Weg, um das zu tun?

Fabien Papleux
quelle
3
Willkommen bei der IoT SE. Können Sie das Setup etwas näher erläutern? Auf welcher Art von Maschine läuft emqttd und in welcher Version?
Helmar

Antworten:

5

Ich möchte Clients überwachen, die eine Verbindung zu einem separaten Prozess herstellen und trennen, der ein Systemthema abonniert, in dem Geburts- und Willensnachrichten veröffentlicht werden.

Das Benutzerhandbuch von emqtt zeigt ein Systemthema, das einige Broker-Statistiken enthält, dh $SYS/brokers/${node}/stats/clients/countdie Anzahl der aktuell verbundenen Clients. Beachten Sie, dass hier keine Details zu den verbundenen Clients aufgeführt werden. Ich gehe davon aus, dass dies hier nicht erforderlich ist.

Last Will-Nachrichten (LWT, Last Will und Testament) sind kein Systemthema, sondern ein reguläres Thema, das vom Client während der Verbindung eingerichtet wurde. Wenn Sie dieses Thema überwachen möchten, abonnieren Sie es einfach. Beachten Sie jedoch, dass LWT-Nachrichten verworfen werden, wenn ein Client die Verbindung ordnungsgemäß durch Senden einer DISCONNECT-Nachricht trennt (siehe hiveMQ-Blog , übrigens großartig gelesen).

Das Benutzerhandbuch von emqtt bietet eine bessere Möglichkeit, das Verbinden und Trennen von Clients zu überwachen:

Die ./bin/emqttd_ctlBefehlszeile kann zum Abfragen und Verwalten des EMQ-Brokers verwendet werden (funktioniert nicht unter Windows).

Ich denke, dass die Überwachung clients list- alle MQTT-Clients auflisten - und clients show <ClientId>- einen MQTT-Client anzeigen - hier am hilfreichsten ist. Der geplante separate Prozess zur Überwachung von Kunden muss daher nicht beim Broker abonniert werden, sondern wird einfach verwendet ./bin/emqttd_ctl.

    $ ./bin/emqttd_ctl clients list
    Client(mosqsub/43832-airlee.lo, clean_sess=true, username=test, peername=127.0.0.1:64896, connected_at=1452929113)
    Client(mosqsub/44011-airlee.lo, clean_sess=true, username=test, peername=127.0.0.1:64961, connected_at=1452929275)
Ghanima
quelle
Sehr hilfreich. Vielen Dank, dass Sie sich die Zeit genommen haben. emqttd_ctl bietet möglicherweise eine Teillösung, aber mit einem Pubsub hätte ich gehofft, dass Sie diesen Mechanismus zum Erstellen von Warnungen verwenden können. Ich denke, es ist etwas, das ich noch durchsetzen könnte, indem ich Kunden auffordere, Geburts- und Willensnachrichten zu veröffentlichen.
Fabien Papleux
1

Nun, nicht sicher über die Geburtsnachricht und LWT (Last Will and Testament) ist optional gemäß der Spezifikation. Sie würden also nicht unbedingt Nachrichten erhalten, wenn Sie Ihren Broker nicht an diese Anforderungen angepasst hätten.

Cogito ergo sum
quelle
LWT ist der Broker, der im Namen des nicht verbundenen Clients handelt. Die Implementierung ist für den Broker nicht optional. Es ist für den Kunden lediglich optional, ein Last-Will-Thema einzurichten.
Ghanima
Das habe ich gemeint. Der Client sendet möglicherweise nicht als Teil des Verbindungspakets.
Cogitoergosum