Antwort anfordern – Neue Funktionen von MQTT 5.0

MQTT v5 bringt viele neue Funktionen, und wir werden unser Bestes geben, um diese Funktionen auf leicht verständliche Weise zu präsentieren und die Auswirkungen dieser Funktionen auf Entwickler zu diskutieren. Bisher haben wir diese besprochen neue Funktionen von MQTT v5. Heute werden wir weiter diskutieren: Antwort anfordern.

Antwort anfordern

In dem MQTT-Client, wissen wir, dass wir entweder Nachrichten zu einem bestimmten Thema veröffentlichen oder ein bestimmtes Thema abonnieren können, um Nachrichten von Interesse zu erhalten. Wenn sichergestellt werden soll, dass einige Personen abonniert sind, kann eine QoS größer als 0 sicherstellen, dass Nachrichten an den Abonnenten geliefert werden. Wenn wir jedoch einige Geschäftsszenarien kombinieren, bei denen nicht nur Nachrichten an den Abonnenten übermittelt werden müssen und der Abonnent möglicherweise einige Aktionen auslösen und Ergebnisse zurückgeben muss oder einige Informationen vom Abonnenten anfordern muss, erfolgt die Implementierung unter dem Publish-Subscribe-Modell ist etwas umständlich, und die zwei Kommunikationsparteien müssen im Voraus ein Anfragethema und ein Antwortthema aushandeln.

Wenn das gleiche Anforderungsthema viele Anforderer hat, benötigen wir mehrere verschiedene Antwortthemen, um die Antwort korrekt an den Anforderer zurückzugeben. Die gebräuchlichste Methode ist das Einfügen des Felds Client-ID, das den anfragenden Client eindeutig am Kopf der Payload oder an anderer Stelle identifizieren kann. Der Responder extrahiert diese Felder und die tatsächliche Nutzlast gemäß den vorab vereinbarten Regeln und verwendet diese Felder zum Erstellen eines Antwortthemas.

image20200901155125123.png

Dies ist jedoch keine gute Implementierung. Wir erwarten, dass der Empfänger der Anfrage nur darauf achten muss, wie er Anfragen verarbeitet, ohne zusätzliche Energie darauf zu verwenden, wie er die Antwort an den Anfragenden korrekt zurücksendet. Daher fügt MQTT 5.0 das neue Attribut hinzu Antwortthemaund definieren Sie den folgenden Anfrage-Antwort-Interaktionsprozess:

  1. MQTT-Client (Anforderer) veröffentlichen die Anforderungsnachricht einschließlich Antwortthema zum Anfragethema.
  2. Wenn andere MQTT-Clients (Responder) den Topic-Filter abonnieren, der mit dem Topic-Namen übereinstimmt, der beim Veröffentlichen von Anfragen verwendet wird, wird die Anfragenachricht empfangen.
  3. Der Responder ergreift entsprechend der Anforderungsnachricht geeignete Maßnahmen und veröffentlicht dann die Antwortnachrichten zu dem durch dieses Attribut angegebenen Thema Antwortthema.

image20200901155200573.png

Korrelationsdaten

Anders als beim HTTP-Request-Response-Modell, MQTT Anfrage-Antwort ist asynchron, was ein Problem mit sich bringt, nämlich wie die Antwortnachricht mit der Anfragenachricht verknüpft werden soll. Die am häufigsten verwendete Methode besteht darin, ein charakteristisches Feld in der Anforderungsnachricht zu tragen. Der Responder wird die empfangenen Felder intakt zurücksenden, wenn er die Antwortnachricht erhält. Offensichtlich berücksichtigt MQTT dies auch, also fügen wir ein neues Attribut hinzu Korrelationsdaten für das PUBLISH-Paket.

image20200901154600805.png

Antwortnachricht

Wir haben oben bereits erwähnt, dass es Fälle geben kann, in denen mehrere Anfragende Anfragen gleichzeitig initiieren. Um Konflikte zwischen verschiedenen Anforderern zu vermeiden, sollte das vom Anforderer-Client verwendete Antwortthema für diesen Client eindeutig sein. Da der Anforderer und der Antwortende diese Themen normalerweise autorisieren müssen, führt die Verwendung eines zufälligen Themennamens zu einer Autorisierungsabfrage.

Um dieses Problem zu lösen, definiert MQTT 5.0 ein neues Attribut namens Antwortnachricht im CONNACK-Paket. Der Server kann dieses Attribut verwenden, um den Client bei der Auswahl des zu verwendenden Antwortthemas anzuleiten. Dieser Mechanismus ist für Server und Client optional. Beim Verbinden fordert der Client den Server auf, Antwortnachrichten zu senden, indem er das Anforderungs-Antwort-Informationsattribut im CONNECT-Paket setzt. Dies veranlasst den Server, das Antwortinformationsattribut in das CONNACK-Paket einzufügen, und der Anforderer kann die Antwortinformationen verwenden, um das Antwortthema aufzubauen.

image20200901161153410.png

Anwendungsempfehlung

  • Aufgrund einiger Einschränkungen des Publish-Subscribe-Modells kann die Verwendung einer QoS größer als 0 nur sicherstellen, dass die Nachricht das andere Ende und nicht den Abonnenten erreicht. Wenn das Abonnement beim Veröffentlichen von Nachrichten nicht abgeschlossen wird, geht die Nachricht verloren, aber der Herausgeber ist sich dessen nicht bewusst. Daher können Sie bei einigen Nachrichten mit strengeren Übermittlungsanforderungen bestätigen, ob die Nachricht den Abonnenten erreicht hat, indem Sie eine Antwort anfordern.

  • Wenn Sie das Gefühl haben, dass das Berichtsintervall für einige Arten von Datenberichtsanwendungen zu lang oder zu kurz ist, um angemessen zu sein, können Sie versuchen, es so einzustellen, dass Daten aktiv angefordert werden, indem eine Antwort angefordert wird. Es sollte jedoch beachtet werden, dass die Verluste die Gewinne überwiegen können, wenn zu viele Anforderer dazu führen, dass die tatsächliche Häufigkeit der Datenübermittlung sehr viel höher als die ursprüngliche ist, sodass Sie das tatsächliche Szenario berücksichtigen müssen.

  • Wenn Sie die verwendet haben Korrelationsdaten Attribut richtig, können Sie verwenden geteilte Abonnements für Responder mit Zuversicht.

  • Achten Sie besonders auf Fälle, in denen mehrere Responder dasselbe Anforderungsthema abonnieren und mehrere Requester dasselbe Antwortthema abonnieren.

Ursprünglich erschienen bei https://www.emqx.com.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *