HiveMQs Blog listet unter "Best Practices" auf, dass der mehrstufige Platzhalter nicht abonniert wird, wenn versucht wird, alle Nachrichten in eine Datenbank zu sichern . Sie behaupten, dass der abonnierende Client möglicherweise nicht in der Lage ist, mit einer hohen Nachrichtenlast Schritt zu halten, und schlagen stattdessen vor, ein Broker-Plugin zu verwenden, um sich direkt in den Nachrichtenstrom einzuklinken.
Manchmal ist es notwendig, alle Nachrichten zu abonnieren, die über den Broker übertragen werden, zum Beispiel, wenn alle in einer Datenbank gespeichert werden. Dies sollte nicht mithilfe eines MQTT-Clients und Abonnieren des mehrstufigen Platzhalters erfolgen. Der Grund dafür ist, dass der abonnierende Client häufig nicht in der Lage ist, die anstehenden Nachrichtenmengen zu verarbeiten. Besonders wenn Sie einen massiven Durchsatz haben. Unsere empfohlene Lösung besteht darin, eine Erweiterung im MQTT-Broker zu implementieren. Mit dem Plug-in-System von HiveMQ können Sie sich in das Verhalten von HiveMQ einbinden und eine asynchrone Routine hinzufügen, um jede eingehende Nachricht zu verarbeiten und in einer Datenbank zu speichern.
Gibt es auch
- ein ähnliches System (Erweiterung / Plugin) für den Moskito-Broker,
- eine andere empfohlene Methode, die mit Mücken arbeitet, oder
- vernünftige Beweise dafür, dass dieser Ansatz überhaupt nicht notwendig ist, dh dass ein Kunde, der sich anmeldet, das auch
#
kann?
/programming//q/31584613/3984613 behandelt diese Frage nicht vollständig.
Diese Diskussion auf der openHAB-Mailingliste scheint darauf hinzudeuten , dass es kein Problem gibt
#
, alle Nachrichten als Abonnement zu verwenden:Diese Stapelüberlauf-Frage schlägt auch die gleiche Methode vor:
Wie von Bence Kaulics hervorgehoben , besagt die Spezifikation, dass
#
gilt:Ehrlich gesagt, bezweifle ich, dass die ursprüngliche Behauptung überhaupt Sinn macht:
Wenn dies der Fall ist, wie könnte der Broker die Nachrichten überhaupt behandeln? Solange Ihr Client ähnliche Leistungsmerkmale an den Broker hat, ich stark bezweifle , wäre es möglich , den Client zu überwältigen, weil das Niveau des Verkehrs auch den Broker und Ursache überwältigen würde , dass zuerst zum Absturz bringen.
Zusammenfassend scheint die Behauptung von HiveMQ nicht durch viele Beweise aus anderen Quellen gestützt zu werden, und wenn Sie sich überlegen, was dies tatsächlich bedeuten würde, erscheint dies nicht besonders logisch.
quelle
Ich denke, es ist wichtig zu berücksichtigen, dass es für MQTT-Broker wie für jede Software viele verschiedene Anwendungsfälle gibt.
Das Verarbeiten von Chat-Nachrichten für eine Milliarde Benutzer (viele Benutzer, relativ niedrige Nachrichtenrate pro Benutzer) unterscheidet sich von einem System mit wenigen Clients, aber hoher Nachrichtenrate, und beide unterscheiden sich von einem Hausautomationssystem (wenige Clients, niedrige Nachrichtenrate). .
HiveMQ denkt über Anwendungen mit sehr hohen Client- / Nachrichtenraten nach. In diesem Fall übertrifft die Leistungsfähigkeit des Brokers mit ziemlicher Sicherheit die eines Clients bei weitem.
Wenn Sie sich für
#
Ihr Hausautomationssystem anmelden möchten, ist es sehr unwahrscheinlich, dass dies zu Problemen führt. Sie können auf jeden Fall überprüfen, ob der Broker übermäßig viel CPU verwendet.Wie in den anderen Antworten erhalten Sie beim Abonnieren von
#
alle "normalen" Themen, also alles, was nicht mit a beginnt$
. Ich interpretiere die Spezifikation so, dass jedes Thema, das mit beginnt,$
ein ganz eigener Baum für sich ist. Sie müssten also abonnieren$SYS/#
,$whatever/#
um alles zu erhalten . Wahrscheinlich möchten Sie das für eine normale Anwendung sowieso nicht tun.quelle