Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Direktnachrichten
AWS IoT Core unterstützt jetzt Direct Messaging. Sie können eine Nachricht über die MQTT-Client-ID an ein einzelnes verbundenes Gerät senden, ohne dass das Gerät ein Thema abonnieren muss.
Bisher erforderte das Senden einer Nachricht an ein bestimmtes Gerät die Veröffentlichung eines Themas, das das Gerät abonniert hatte, ohne dass eine integrierte Methode zur Bestätigung der Zustellung vorhanden war. Der Absender ruft die SendDirectMessage HTTP-API auf und gibt dabei die Client-ID des Empfängers und ein Zielthema an. Wennconfirmation=true, AWS IoT Core liefert mit QoS 1 und wartet auf den PUBACK-Wert des Empfängers, bevor eine erfolgreiche Antwort zurückgegeben wird. Dadurch erhalten Sie eine durchgängige Zustellungsbestätigung. API-Antworten und Amazon CloudWatch Logs bieten einen vollständigen Überblick über den Lieferstatus und die Fehlerursachen.
Direktnachrichten werden nicht nach AWS IoT Regeln für die Regelausführung verarbeitet, für Geräte, die offline sind, nicht in die Warteschlange gestellt und unterstützen keine gespeicherten Nachrichten.
Voraussetzungen
Sowohl der Absender als auch der Empfänger benötigen bestimmte Richtlinien, um Direktnachrichten verwenden zu können. Der Absender muss die iot:SendDirectMessage Erlaubnis haben. Die Ziel-Client-ID wird als Ressource angegeben und der iot:Topic Bedingungsschlüssel (optional) schränkt ein, an welche Themen ein Absender Direktnachrichten senden kann. Der Empfänger muss über die iot:Receive Genehmigung für das Zielthema verfügen. Der Empfänger benötigt keine iot:Subscribe Genehmigung — AWS IoT Core übermittelt Direktnachrichten, ohne dass ein Themenabonnement erforderlich ist. Weitere Informationen und Beispielrichtlinien finden Sie unterBeispiele für Richtlinien für Direktnachrichten.
Informationen zu den Authentifizierungs- und Portzuordnungen, die von HTTP-Anforderungen verwendet werden, finden Sie unter Protokolle, Port-Zuweisungen und Authentifizierung.
SendDirectMessage API
Absender können Direktnachrichten senden, indem sie HTTP-POST-Anfragen an eine clientspezifische URL stellen:
https://IoT_data_endpoint/connections/client_id/messages?topic=topic_name&confirmation=true&timeout=10
-
IoT_data_endpointist der AWS IoT Endpunkt der Gerätedaten. Suchen Sie unterAWS IoT Gerätedaten und Dienstendpunkte, um Ihren Endpunkt zu finden. -
client_idist die eindeutige Kennung des MQTT-Clients, an den die Nachricht gesendet werden soll. Client-IDs dürfen 128 Zeichen nicht überschreiten und dürfen nicht mit einem Dollarzeichen ($) beginnen. MQTT-Client-IDs müssen URL-codiert (prozentcodiert) sein, wenn sie Zeichen enthalten, die in HTTP-Anfragen nicht gültig sind, wie Leerzeichen, Schrägstriche (/) und Zeichen. UTF-8 Weitere Informationen finden Sie unter Grenzwerte und Kontingente für AWS IoT Core Message-Broker und Protokolle. -
topic_nameist das Thema, zu dem der Empfänger die Nachricht empfängt, URL-encoded. Darf nicht mit $ beginnen. Darf kein AWS IoT Core reserviertes Thema sein. Informationen zu Längen- und Tiefenbeschränkungen für Themen finden Sie auf der Seite mit den AWS IoT Core Servicekontingenten. Weitere Informationen finden Sie unter Grenzwerte und Kontingente für AWS IoT Core Message Broker und Protokolle. -
confirmationist ein boolescher Wert. Bei Einstellung auf übermittelt die API die Nachricht mit QoS 1 und wartet darauftrue, dass der MQTT-Client eine Übermittlungsbestätigung (PUBACK) sendet, bevor eine erfolgreiche Antwort zurückgegeben wird. Wenn die Lieferbestätigung nicht innerhalb des angegebenen Timeout-Zeitraums eingeht, gibt die API HTTP 504 zurück. -
timeoutist eine Ganzzahl, die die maximale Wartezeit in Sekunden auf eine Zustellungsbestätigung (PUBACK) vom empfangenden Client nach Zustellung der Nachricht angibt. Dieser Parameter wird nur verwendet, wenn er auftruegesetztconfirmationist. Wennconfirmationjafalse, wird dieser Parameter ignoriert. Die gesamte API-Antwortzeit kann aufgrund interner Verarbeitung höher als dieser Wert sein. Stellen Sie Ihr HTTP-Client-Timeout auf einen Wert ein, der größer als dieser Parameter ist.
Statuscodes der API-Antwort
In der folgenden Tabelle sind die von der SendDirectMessage API zurückgegebenen HTTP-Statuscodes und die jeweils empfohlenen Aktionen aufgeführt. Aktivieren Sie AWS IoT Core CloudWatch Protokolle, um detaillierte SendDirectMessage Ereignisprotokolle einschließlich des Felds „Grund“ für die programmatische Fehlerbehandlung anzuzeigen.
| HTTP-Code | Empfohlene Aktion |
|---|---|
| 200 OK | Wenn die Zustellungsbestätigung mit angefordert wurdeconfirmation=true, bedeutet dies, dass der Empfänger den Nachrichtenempfang bestätigt hat. Andernfalls bedeutet dies, dass die Nachricht erfolgreich versendet wurde. |
| 400 Bad Request (400 Ungültige Anfrage) | Das bedeutet, dass einer der Parameter ungültig ist. Überprüfen Sie die HTTP-Antwortnachricht oder die CloudWatch Protokolle, um bestimmte Fehler zu identifizieren und zu beheben. Stellen Sie sicher, dass der Themenname und Client-id die Themen gültig und URL-encoded korrekt sind. |
| 403 Forbidden | Dies bedeutet, dass die Richtlinie des Absenders für den Zielclient und das Zielthema keine Gewährung gewährtiot:SendDirectMessage, oder dass die Richtlinie des Empfängers keine Gewährung für das iot:Receive Thema gewährt. Überprüfen Sie die HTTP-Antwortnachricht oder die CloudWatch Protokolle, um bestimmte Fehler zu identifizieren, und aktualisieren Sie die entsprechende Richtlinie. Siehe Beispiele für Richtlinien für Direktnachrichten. |
| 404 Not Found (404 Nicht gefunden) | Das bedeutet, dass die Zielclient-ID nicht mit verbunden ist AWS IoT Core. Überprüfen Sie die HTTP-Antwortnachricht oder die CloudWatch Protokolle auf den spezifischen Grund, stellen Sie sicher, dass der Empfänger verbunden ist, und versuchen Sie es erneut. Wenn in der Antwortnachricht „Die Zielclient-ID ist nicht verbunden, aber sie hat eine aktive persistente Sitzung“ lautet, hat der Zielclient eine noch nicht abgelaufene persistente Sitzung, ist aber derzeit offline. |
| 4.1.3 Payload: Zu groß | Die Nutzlast überschreitet die maximal zulässige Größe. Reduzieren Sie die Nutzlastgröße und versuchen Sie es erneut. Siehe AWS IoT Core -Servicekontingente. |
| 429 Zu viele Anfragen | Dies bedeutet, dass das Konto das Limit für SendDirectMessage Anfragen pro Sekunde überschritten hat oder dass die Empfängerverbindung das Limit für ausgehende Veröffentlichungen überschritten hat. Prüfen Sie die HTTP-Antwortnachricht oder die CloudWatch Protokolle auf den spezifischen Grund, reduzieren Sie die Anforderungsrate und implementieren Sie exponentielles Backoff. Siehe AWS IoT Core -Servicekontingente. |
| 500 Internal Server Error | Dies deutet auf einen unerwarteten serverseitigen Fehler hin. Versuchen Sie die Anfrage mit exponentiellem Backoff erneut. Wenn das Problem weiterhin besteht, wenden Sie sich mit der TraceID aus der Antwort an den AWS Support. |
| 504 Gateway-Timeout | Dies bedeutet, dass der Empfänger PUBACK nicht innerhalb des angegebenen Timeout-Zeitraums gesendet hat. Erhöhen Sie den Timeout-Wert, überprüfen Sie, ob der MQTT-Client des Empfängers PUBACK für QoS 1-Nachrichten sendet, oder überprüfen Sie, ob der Empfänger Nachrichten langsam verarbeitet. |
Beispiele
Verhalten des Receiver-Clients
Direct Messaging übermittelt Nachrichten an MQTT-Clients (Empfänger), ohne dass ein Themenabonnement erforderlich ist. Um alle Vorteile von Direct Messaging nutzen zu können, muss der Empfänger die folgenden Verhaltensweisen unterstützen:
-
Nachrichten zu Themen empfangen, die nicht explizit abonniert wurden — Das Direct Messaging des Empfängers kann Nachrichten zu Themen senden, die der Empfänger nicht explizit abonniert hat. Einige MQTT-Client-Implementierungen filtern jedoch Nachrichten zu abgemeldeten Themen oder verwerfen sie. Wenn Ihr Client diese Nachrichten verwirft, funktionieren Direktnachrichten nur zu Themen, die der Empfänger ebenfalls abonniert hat. Um Direktnachrichten zu einem beliebigen Thema zu erhalten, stellen Sie sicher, dass der Nachrichtenhandler Ihres Kunden Nachrichten unabhängig vom Abonnementstatus verarbeitet.
-
Von der API festgelegte QoS verarbeiten — Die QoS-Stufe der übermittelten Nachricht wird durch den
confirmationParameter in der API-Anforderung des Absenders festgelegt, nicht durch das Abonnement des Empfängers. Wenn die Nachricht QoS 1 erreichtconfirmation=true, muss der Client des Empfängers ein PUBACK senden, um die Zustellung zu bestätigen. Wennconfirmation=false, erreicht die Nachricht QoS 0, ohne dass eine Bestätigung erforderlich ist. Stellen Sie sicher, dass die MQTT-Implementierung Ihres Clients sowohl eingehende QoS 0- als auch QoS 1-Nachrichten korrekt verarbeitet.