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.
Ereignisse im Lebenszyklus
AWS IoT kann Lebenszyklusereignisse zu den MQTT-Themen veröffentlichen. Diese Ereignisse stehen standardmäßig zur Verfügung und können nicht deaktiviert werden.
Anmerkung
Nachrichten zum Lebenszyklus können ohne feste Reihenfolge gesendet werden. Unter Umständen erhalten Sie einzelne Nachrichten auch mehrfach.
thingNamewird nur aufgenommen, wenn der Client über die exklusive Funktion eine Verbindung herstellt.
In diesem Thema:
„Verbinden/Verbindung trennen“-Ereignisse
Anmerkung
Mit der Flottenindizierung von AWS IoT Device Management können Sie nach Dingen suchen, aggregierte Abfragen ausführen und dynamische Gruppen auf der Grundlage von Connect/Disconnect Dingereignissen erstellen. Weitere Informationen finden Sie unter Flottenindizierung.
AWS IoT veröffentlicht eine Nachricht zu den folgenden MQTT-Themen, wenn ein Client eine Verbindung herstellt oder trennt:
-
$aws/events/presence/connected/: Ein Client, der mit dem Message Broker verbunden ist.clientId -
$aws/events/presence/disconnected/: Ein Client, dessen Verbindung mit dem Message Broker getrennt wurdeclientId
Im Folgenden finden Sie eine Liste der JSON-Elemente, die in den zum Thema veröffentlichten connection/disconnection Nachrichten enthalten sind. $aws/events/presence/connected/clientId
- clientId
-
Die Client-ID des Clients, der eine Verbindung herstellt oder trennt
Anmerkung
Clients IDs , die # oder + enthalten, empfangen keine Lebenszyklusereignisse.
- thingName
-
Der Name deiner IoT-Sache.
thingNamewird nur aufgenommen, wenn der Client über die exklusive Ding-Funktion eine Verbindung herstellt. - clientInitiatedDisconnect
-
„True“, wenn der Client die Verbindungstrennung initiiert hat. Ansonsten „false“. Nur in Trennungsnachrichten.
- disconnectReason
-
Der Grund, warum der Client die Verbindung trennt. Nur in Trennungsnachrichten. Die folgende Tabelle enthält gültige Werte und gibt an, ob der Broker beim Verbindungsabbruch Last Will and Testament (LWT)-Nachrichten sendet.
Grund für das Trennen der Verbindung Beschreibung Der Broker sendet die LWT-Nachrichten AUTH_ERRORDer Client konnte sich nicht authentifizieren, oder die Autorisierung ist fehlgeschlagen. Ja1 CLIENT_INITIATED_DISCONNECTDer Client gibt an, dass die Verbindung getrennt wird. Der Client kann dies tun, indem er entweder ein DISCONNECTMQTT-Steuerpaket sendet oderClose frameob der Client eine WebSocket Verbindung verwendet.Nein CLIENT_ERRORDer Client hat etwas falsch gemacht, das dazu führt, dass die Verbindung getrennt wird. Beispielsweise wird ein Client getrennt, wenn mehr als ein MQTT CONNECT-Paket auf derselben Verbindung gesendet wird, oder wenn der Client versucht, mit einer Nutzlast zu veröffentlichen, die das Nutzlast-Limit überschreitet.Ja CONNECTION_LOSTDie Client-Server-Verbindung wird unterbrochen. Dies kann während eines Zeitraums mit hoher Netzwerklatenz geschehen, oder wenn die Internetverbindung unterbrochen wird. Ja DUPLICATE_CLIENTIDDer Client verwendet eine Client-ID, die bereits verwendet wird. In diesem Fall wird der Client, der bereits verbunden ist, mit diesem Trenngrund getrennt. Ja FORBIDDEN_ACCESSDer Client darf keine Verbindung herstellen. So kann ein Client beispielsweise mit einer abgelehnten IP-Adresse keine Verbindung herstellen. Ja1 MQTT_KEEP_ALIVE_TIMEOUTWenn es für das 1,5-fache der Keepalive-Zeit des Clients keine Client-Server-Kommunikation gibt, wird der Client getrennt. Ja SERVER_ERRORTrennung der Verbindung aufgrund unerwarteter Serverprobleme. Ja SERVER_INITIATED_DISCONNECTDer Server trennt einen Client aus betrieblichen Gründen absichtlich. Ja API_INITIATED_DISCONNECTDer Client wurde mithilfe der DeleteConnectionAPI getrennt.Ja2 THROTTLEDDer Client wird getrennt, weil er ein Drosselungslimit überschritten hat. Ja WEBSOCKET_TTL_EXPIRATIONDie Verbindung mit dem Client WebSocket wurde unterbrochen, weil die Verbindung zu a länger als ihr time-to-live Wert war. Ja CUSTOMAUTH_TTL_EXPIRATIONDie Verbindung zum Client wurde unterbrochen, weil die Verbindung länger dauert als der time-to-live Wert seines benutzerdefinierten Autorisierers. Ja 1 Wenn das Gerät vor dem Auftreten dieses Fehlers über eine aktive Verbindung verfügte.
2 Um LWT-Nachrichten (Last Will and Testament)
preventWillMessage=truezu verhindern, legen Sie fest, dass das standardmäßigeDeleteConnectionLWT-Sendeverhalten der API außer Kraft gesetzt wird. - eventType
-
Der Ereignistyp. Gültige Werte sind
connectedoderdisconnected. - ipAddress
-
Die IP-Adresse des verbindenden Clients. Dies kann im IPv4 oder IPv6 -Format sein. Nur in Verbindungsnachrichten.
- principalIdentifier
-
Die zur Anmeldung verwendeten Anmeldeinformationen. Für gegenseitige TLS-Authentifizierungszertifikate ist dies die Zertifikat-ID. Für andere Verbindungsarten sind dies die IAM-Anmeldeinformationen.
- sessionIdentifier
-
Ein global eindeutiger Bezeichner AWS IoT , der für die Dauer der Sitzung existiert.
- Zeitstempel
-
Eine ungefähre Schätzung, wann das Ereignis eingetreten ist.
- versionNumber
-
Die Versionsnummer für das Lebenszyklusereignis. Dies ist ein monoton ansteigender langer Ganzzahlwert für jede Client-ID-Verbindung. Die Versionsnummer kann von einem Abonnenten verwendet werden, um die Reihenfolge der Lebenszyklusereignisse festzustellen.
Anmerkung
Die Verbindungs- und Trennungsnachrichten für eine Client-Verbindung haben dieselbe Versionsnummer.
Die Versionsnummer kann Werte überspringen und wird nicht zwingend konsistent für jedes Ereignis um 1 erhöht.
Wenn ein Client etwa eine Stunde lang nicht verbunden ist, wird die Versionsnummer auf 0 zurückgesetzt. Bei persistenten Sitzungen wird die Versionsnummer auf 0 zurückgesetzt, nachdem ein Client länger als die für die persistente Sitzung konfigurierte Verbindung time-to-live (TTL) getrennt wurde.
Eine Verbindungsnachricht hat die folgende Struktur.
{ "clientId": "186b5", "thingName": "exampleThing", "timestamp": 1573002230757, "eventType": "connected", "sessionIdentifier": "00000000-0000-0000-0000-000000000000", "principalIdentifier": "12345678901234567890123456789012", "ipAddress": "192.0.2.0", "versionNumber": 0 }
Eine Trennungsnachricht hat die folgende Struktur.
{ "clientId": "186b5", "thingName": "exampleThing", "timestamp": 1573002340451, "eventType": "disconnected", "sessionIdentifier": "00000000-0000-0000-0000-000000000000", "principalIdentifier": "12345678901234567890123456789012", "clientInitiatedDisconnect": true, "disconnectReason": "CLIENT_INITIATED_DISCONNECT", "versionNumber": 0 }
Umgang mit Client-Verbindungstrennungen
Es ist eine bewährte Methode, für Lebenszyklusereignisse (einschließlich Last Will and Testament (LWT)-Nachrichten) stets einen implementierten Wartestatus zu verwenden. Wenn eine getrennte Verbindung signalisiert wird, sollte Ihr Code eine gewisse Zeit warten und überprüfen, ob ein Gerät noch offline ist, bevor Maßnahmen ergriffen werden. Eine Möglichkeit dazu ist das Verwenden von SQS-Verzögerungswarteschlangen. Wenn ein Client ein LWT- oder Lebenszyklusereignis erhält, können Sie eine Nachricht für (beispielsweise) ca. 5 Sekunden in eine Warteschlange stellen. Wenn die Nachricht verfügbar ist und verarbeitet wird (durch Lambda oder einen anderen Service), können Sie zunächst überprüfen, ob das Gerät immer noch offline ist, bevor Sie zu weiteren Maßnahmen greifen.
Ereignis mit fehlgeschlagenem Verbindungsversuch
AWS IoT veröffentlicht eine Nachricht zum folgenden MQTT-Thema, wenn ein Client nicht autorisiert ist, eine Verbindung herzustellen, oder wenn ein Testament konfiguriert ist und der Client nicht berechtigt ist, zu diesem letzten Testament-Thema zu veröffentlichen.
$aws/events/presence/connect_failed/clientId
Im Folgenden finden Sie eine Liste der JSON-Elemente, die in den $aws/events/presence/connect_failed/ zum Thema veröffentlichten Verbindungsautorisierungsnachrichten enthalten sind.clientId
- clientId
-
Die Client-ID des Clients, der versucht hat, eine Verbindung herzustellen, aber fehlgeschlagen ist.
Anmerkung
Clients IDs , die # oder + enthalten, empfangen keine Lebenszyklusereignisse.
- thingName
-
Der Name deiner IoT-Sache.
thingNamewird nur aufgenommen, wenn der Client über die exklusive Ding-Funktion eine Verbindung herstellt. - Zeitstempel
-
Eine ungefähre Schätzung, wann das Ereignis eingetreten ist.
- eventType
-
Der Ereignistyp. Gültiger Wert ist
connect_failed. - connectFailureReason
-
Der Grund, warum die Verbindung fehlschlägt. Gültiger Wert ist
AUTHORIZATION_FAILED. - principalIdentifier
-
Die zur Anmeldung verwendeten Anmeldeinformationen. Für gegenseitige TLS-Authentifizierungszertifikate ist dies die Zertifikat-ID. Für andere Verbindungsarten sind dies die IAM-Anmeldeinformationen.
- sessionIdentifier
-
Ein global eindeutiger Bezeichner AWS IoT , der für die Dauer der Sitzung existiert.
- ipAddress
-
Die IP-Adresse des verbindenden Clients. Dies kann in unserem IPv4 IPv6 Format sein. Nur in Verbindungsnachrichten.
Eine Meldung über einen Verbindungsfehler hat die folgende Struktur.
{ "clientId": "186b5", "thingName": "exampleThing", "timestamp": 1460065214626, "eventType": "connect_failed", "connectFailureReason": "AUTHORIZATION_FAILED", "principalIdentifier": "12345678901234567890123456789012", "sessionIdentifier": "00000000-0000-0000-0000-000000000000", "ipAddress" : "192.0.2.0" }
„Abonnieren/Abonnement beenden“-Ereignisse
AWS IoT veröffentlicht eine Nachricht zum folgenden MQTT-Thema, wenn ein Client ein MQTT-Thema abonniert oder abbestellt:
$aws/events/subscriptions/subscribed/clientId
or
$aws/events/subscriptions/unsubscribed/clientId
Hierbei ist clientId die MQTT-Client-ID, über die eine Verbindung zum AWS IoT
Message Broker hergestellt wird.
Die im Topic veröffentlichte Nachricht weist die folgende Struktur auf:
{ "clientId": "186b5", "thingName": "exampleThing", "timestamp": 1460065214626, "eventType": "subscribed" | "unsubscribed", "sessionIdentifier": "00000000-0000-0000-0000-000000000000", "principalIdentifier": "12345678901234567890123456789012", "topics" : ["foo/bar","device/data","dog/cat"] }
Die nachfolgende Liste enthält JSON-Elemente, die in „Abonnieren/Abonnement abbestellen“-Nachrichten enthalten sind, die an die Topics $aws/events/subscriptions/subscribed/ und clientId$aws/events/subscriptions/unsubscribed/ gesendet werden.clientId
- clientId
-
Die Client-ID des Clients, der ein Topic abonniert oder das Abonnement abbestellt.
Anmerkung
Clients IDs , die # oder + enthalten, empfangen keine Lebenszyklusereignisse.
- thingName
-
Der Name deiner IoT-Sache.
thingNamewird nur aufgenommen, wenn der Client über die exklusive Ding-Funktion eine Verbindung herstellt. - eventType
-
Der Ereignistyp. Gültige Werte sind
subscribedoderunsubscribed. - principalIdentifier
-
Die zur Anmeldung verwendeten Anmeldeinformationen. Für gegenseitige TLS-Authentifizierungszertifikate ist dies die Zertifikat-ID. Für andere Verbindungsarten sind dies die IAM-Anmeldeinformationen.
- sessionIdentifier
-
Ein global eindeutiger Bezeichner AWS IoT , der für die Dauer der Sitzung existiert.
- Zeitstempel
-
Eine ungefähre Schätzung, wann das Ereignis eingetreten ist.
- topics
-
Ein Array der vom Client abonnierten MQTT-Topics.
Anmerkung
Nachrichten zum Lebenszyklus können ohne feste Reihenfolge gesendet werden. Unter Umständen erhalten Sie einzelne Nachrichten auch mehrfach.