Unterstützt von
Java script
SGC Default Protocol und MQTT implementieren QoS (Quality of Service) für die Nachrichtenzustellung. Es gibt 3 verschiedene Typen:
Level 0: "At most once", bei dem Nachrichten gemäß dem besten Bemühen des zugrunde liegenden TCP/IP-Netzwerks zugestellt werden. Nachrichtenverlust oder -duplizierung kann auftreten. Diese Stufe könnte zum Beispiel mit Umgebungs- sensordaten verwendet werden, bei denen es nicht darauf ankommt, ob eine einzelne Messung verloren geht, da die nächste bald darauf veröffentlicht wird.
Level 1: "At least once", bei dem garantiert wird, dass Nachrichten ankommen, aber Duplikate auftreten können.
Level 2: "Genau einmal", bei dem garantiert wird, dass Nachrichten genau einmal eintreffen. Diese Ebene könnte zum Beispiel bei Abrechnungssystemen verwendet werden, bei denen doppelte oder verlorene Nachrichten zu falsch angewendeten Gebühren führen könnten.
Die Nachricht wird nach bestem Bemühen des zugrunde liegenden TCP/IP-Netzwerks zugestellt. Es wird keine Antwort erwartet und im Protokoll sind keine Wiederholungssemantiken definiert. Die Nachricht trifft entweder einmal oder gar nicht beim Server ein.
Die folgende Tabelle zeigt den Protokollablauf für QoS-Level 0.
| Client | Message and direction | Server |
|---|---|---|
| QoS = 0 | PUBLISH ----------> |
Action: Veröffentlicht eine Nachricht an Abonnenten |
Der Empfang einer Nachricht durch den Server wird durch eine ACKNOWLEDGEMENT-Nachricht bestätigt. Wenn ein identifizierter Ausfall entweder der Kommunikationsverbindung oder des Sendegeräts vorliegt oder die Bestätigungsnachricht nicht innerhalb eines bestimmten Zeitraums empfangen wird, sendet der Sender die Nachricht erneut. Die Nachricht erreicht den Server mindestens einmal.
Eine Nachricht mit QoS-Level 1 hat eine Message-ID in der Nachricht.
Die folgende Tabelle zeigt den QoS-Level-1-Protokollablauf.
| Client | Message and direction | Server |
|---|---|---|
| QoS
= 1 Message ID = x Action: Nachricht speichern |
PUBLISH ----------> |
Actions:
|
| Action: Nachricht verwerfen | ACKNOWLEDGEMENT<---------- |
Wenn der Client keine ACKNOWLEDGMENT-Nachricht empfängt (entweder innerhalb eines in der Anwendung definierten Zeitraums oder wenn ein Fehler erkannt wird und die Kommunikationssitzung neu gestartet wird), kann der Client die PUBLISH-Nachricht erneut senden.
Zusätzliche Protokoll-Flows oberhalb von QoS-Level 1 stellen sicher, dass keine doppelten Nachrichten an die empfangende Anwendung zugestellt werden. Dies ist die höchste Zustellungsebene, zur Verwendung, wenn doppelte Nachrichten nicht akzeptabel sind. Es gibt eine Zunahme des Netzwerkverkehrs, aber dies ist normalerweise aufgrund der Wichtigkeit des Nachrichteninhalts akzeptabel.
Eine Nachricht mit QoS-Level 2 hat eine Message ID in der Nachricht.
Die folgende Tabelle zeigt den QoS-Level-2-Protokollablauf. Es gibt zwei verfügbare Semantiken dafür, wie ein PUBLISH-Ablauf vom Empfänger verarbeitet werden soll.
| Client | Message and direction | Server |
|---|---|---|
| QoS
= 2 Message ID = x Action: Nachricht speichern |
PUBLISH ----------> |
Aktion: Nachricht speichern |
PUBREC <---------- |
Message ID = x | |
| Message ID = x | PUBREL ----------> |
Actions:
|
| Action: Nachricht verwerfen | ACKNOWLEDGEMENT <---------- |
Message ID = x |
Wenn ein Fehler erkannt wird oder nach einem definierten Zeitraum, wird der Protokollablauf ab der letzten unbestätigten Protokollnachricht erneut versucht. Die zusätzlichen Protokollabläufe stellen sicher, dass die Nachricht genau einmal an die Abonnenten zugestellt wird.