Události životního cyklu klientů MQTT

Události životního cyklu klienta umožňují aplikacím reagovat na události týkající se stavu připojení klienta nebo operací prostředků klienta. Umožňuje:

  • Monitorujte stav připojení klientů. Můžete například vytvořit aplikaci, která analyzuje připojení klientů za účelem optimalizace chování.
  • React with a mitigation action for client disconnections. Můžete například vytvořit aplikaci, která zahájí tok automatického zmírnění rizik nebo vytvoří lístek podpory při každém odpojení klienta.
  • Sledujte obor názvů, ke kterému jsou vaši klienti připojeni. Po zahájení převzetí služeb při selhání se například ujistěte, že jsou vaši klienti připojení ke správnému oboru názvů.

Typy událostí

Obor názvů Event Gridu publikuje následující typy událostí:

Typ události Popis
Microsoft.EventGrid.MQTTClientSession Připojení ed Publikováno, když je relace klienta MQTT připojena k Event Gridu.
Microsoft.EventGrid.MQTTClientSessionDisconnected Publikuje se při odpojení relace klienta MQTT od služby Event Grid.
Microsoft.EventGrid.MQTTClientCreatedOrUpdated Publikováno při vytvoření nebo aktualizaci klienta MQTT v oboru názvů Event Grid.
Microsoft.EventGrid.MQTTClientDeleted Publikováno při odstranění klienta MQTT z oboru názvů Event Grid.

Schéma událostí

Události životního cyklu klienta poskytují všechny informace o klientovi a relaci, která se připojila nebo odpojila. Poskytuje také odpojeníReason, který můžete použít pro diagnostické scénáře, protože vám umožňuje automatizovat akce pro zmírnění rizik.

Tato ukázková událost ukazuje schéma události vyvolané při připojení relace klienta MQTT ke službě Event Grid:

[{
  "specversion": "1.0",
  "id": "5249c38a-a048-46dd-8f60-df34fcdab06c",
  "time": "2023-07-29T01:23:49.6454046Z",
  "type": "Microsoft.EventGrid.MQTTClientSessionConnected",
  "source": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myrg/providers/Microsoft.EventGrid/namespaces/myns",
  "subject": "clients/client1/sessions/session1",
  "data": {
    "namespaceName": "myns",
    "clientAuthenticationName": "client1",
    "clientSessionName": "session1",
    "sequenceNumber": 1
  }
}]

Tato ukázková událost ukazuje schéma události vyvolané při odpojení relace klienta MQTT ke službě Event Grid:

[{
  "specversion": "1.0",
  "id": "e30e5174-787d-4e19-8812-580148bfcf7b",
  "time": "2023-07-29T01:27:40.2446871Z",
  "type": "Microsoft.EventGrid.MQTTClientSessionDisconnected",
  "source": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myrg/providers/Microsoft.EventGrid/namespaces/myns",
  "subject": "clients/client1/sessions/session1",
  "data": {
    "namespaceName": "myns",
    "clientAuthenticationName": "client1",
    "clientSessionName": "session1",
    "sequenceNumber": 1,
    "disconnectionReason": "ClientInitiatedDisconnect"
  }
}]

Tato ukázková událost ukazuje schéma události vyvolané při vytvoření nebo aktualizaci klienta MQTT v oboru názvů Event Grid:

[{
  "specversion": "1.0",
  "id": "383d1562-c95f-4095-936c-688e72c6b2bb",
  "time": "2023-07-29T01:14:35.8928724Z",
  "type": "Microsoft.EventGrid.MQTTClientCreatedOrUpdated",
  "source": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myrg/providers/Microsoft.EventGrid/namespaces/myns",
  "subject": "clients/client1",
  "data": {
    "createdOn": "2023-07-29T01:14:34.2048108Z",
    "updatedOn": "2023-07-29T01:14:34.2048108Z",
    "namespaceName": "myns",
    "clientName": "client1",
    "clientAuthenticationName": "client1",
    "state": "Enabled",
    "attributes": {
      "attribute1": "value1"
    }
  }
}]

Tato ukázková událost ukazuje schéma události vyvolané při odstranění klienta MQTT z oboru názvů Event Grid:

[{
  "specversion": "1.0",
  "id": "2a93aaf9-66c2-4f8e-9ba3-8d899c10bf17",
  "time": "2023-07-29T01:30:52.5620566Z",
  "type": "Microsoft.EventGrid.MQTTClientDeleted",
  "source": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myrg/providers/Microsoft.EventGrid/namespaces/myns",
  "subject": "clients/client1",
  "data": {
    "namespaceName": "myns",
    "clientName": "client1",
    "clientAuthenticationName": "client1"
  }
}]

Důvody odpojení:

Následující seznam podrobně popisuje různé hodnoty pro disconnectionReason a jejich popis:

Důvod odpojení Popis
Chyba ověření klienta Klient se odpojil z jakýchkoli důvodů ověřování (například vypršela platnost certifikátu, klient se zakázal nebo změnila konfigurace klienta).
Chyba clientAuthorizationError Klient se odpojil z jakýchkoli důvodů autorizace (například kvůli změně konfigurace prostorů témat, vazeb oprávnění nebo skupin klientů).
Chyba klienta klient odeslal chybný požadavek nebo použil některou z nepodporovaných funkcí, které způsobily ukončení připojení službou.
ClientInitiatedDisconnect klient zahájí řádné odpojení prostřednictvím paketu DISCONNECT pro MQTT nebo uzavření rámce pro MQTT přes WebSocket.
Připojení ionLost připojení klienta-serveru je ztraceno.
IpForbidden IP adresa klienta je blokována konfigurací filtru IP nebo privátních propojení.
QuotaExceeded klient překročil jeden nebo více limitů omezování, které způsobily ukončení připojení službou.
Chyba serveru připojení se ukončilo kvůli neočekávané chybě serveru
ServerInitiatedDisconnect server zahájí řádné odpojení z jakéhokoli provozního důvodu.
SessionOverflow fronta klienta pro nevěděné zprávy QoS1 dosáhla svého limitu, což způsobilo ukončení připojení serverem.
SessionTakenOver klient se znovu připojil se stejným názvem ověřování, který způsobil ukončení předchozího připojení.

Podrobný popis jednotlivých vlastností najdete ve schématu událostí pro obor názvů event Gridu.

Tip

Zpracování vysoké míry kolísání stavů připojení: Při přijetí události odpojení klienta počkejte na určitou dobu (například 30 sekund) a ověřte, že je klient stále offline, a teprve potom proveďte nápravnou akci. Tato optimalizace zlepšuje efektivitu při zpracování rychle se měnících stavů.

Konfigurace

Konfigurace webu Azure Portal

Pomocí následujících kroků vygenerujte události životního cyklu klienta:

  1. V oboru názvů přejděte na kartu Události.
  2. Vyberte +Odběr události.
    • Zadejte název odběru služby Event Grid.
    • Vyberte schéma událostí, které dáváte přednost využití událostí.
    • Vyfiltrujte události v části Typy událostí.
    • Vyplňte podrobnosti o koncovém bodu.
  3. Vyberte Vytvořit.

Konfigurace Azure CLI

Pomocí následujících kroků vygenerujte události životního cyklu klienta:

  1. Vytvoření systémového tématu
az eventgrid system-topic create --resource-group <Resource Group > --name <System Topic Name> --location \<Region> --topic-type Microsoft.EventGrid.Namespaces --source /subscriptions//resourceGroups/<Resource Group >/providers/Microsoft.EventGrid/namespaces/<Namespace Name>
  1. Vytvoření odběru Event Gridu
  az eventgrid system-topic event-subscription create --name <Specify Event Subscription Name> -g <Resource Group> --system-topic-name <System Topic Name> --endpoint <Endpoint>

Chování:

  • U událostí životního cyklu klienta neexistuje žádná záruka latence. Události stavu připojení klienta označují poslední hlášený stav připojení relace klienta, nikoli stav připojení v reálném čase.
  • Je možné publikovat duplicitní události životního cyklu klienta.
  • Časové razítko událostí životního cyklu klienta označuje, kdy služba zjistila události, které se můžou lišit od skutečného času události.
  • Pořadí událostí životního cyklu klienta není zaručené, události můžou dorazit mimo pořadí. Pořadové číslo událostí stavu připojení se ale dá použít k určení původního pořadí událostí.
  • Pro událost Vytvoření nebo aktualizaci klienta a událost Odstraněný klient:
    • Pokud dojde k několika změnám stavu prostředku klienta během krátké doby, vygeneruje se jedna událost pro konečný stav klienta.
    • Příklad 1: Pokud se klient vytvoří, pak se aktualizuje dvakrát během 3 sekund, eg vygeneruje pouze jednu událost MQTTClientCreatedOrUpdated s konečnými hodnotami metadat klienta.
    • Příklad 2: Pokud se klient vytvoří, odstraní se během 5 sekund, eg vygeneruje pouze událost MQTTClientDeleted.

Objednání událostí stavu připojení:

Pořadové číslo u událostí MQTTClientSession Připojení ed a MQTTClientSessionDisconnected lze použít k určení posledního hlášeného stavu připojení relace klienta, protože se pořadové číslo zvýší při každé nové události. Pořadové číslo pro MQTTClientSessionDisconnected vždy odpovídá pořadové číslo MQTTClientSession Připojení události stejného připojení. Například seznam událostí a pořadových čísel níže je ukázka událostí ve správném pořadí pro stejného klienta:

  • MQTTClientSession Připojení ed > "sequenceNumber": 1
  • MQTTClientSessionDisconnected > "sequenceNumber": 1
  • MQTTClientSession Připojení ed > "sequenceNumber": 2
  • MQTTClientSessionDisconnected > "sequenceNumber": 2

Tady je ukázková logika pro seřazení událostí: Pro každého klienta:

  • Uložte pořadové číslo a stav připojení z první události.
  • Pro každou novou událost MQTTClientSession Připojení ed:
    • Pokud je nové pořadové číslo větší než předchozí, aktualizujte pořadové číslo a stav připojení tak, aby odpovídalo nové události.
  • Pro každou novou událost MQTTClientSessionDisconnected:
    • Pokud je nové pořadové číslo stejné nebo větší než předchozí, aktualizujte pořadové číslo a stav připojení tak, aby odpovídalo nové události.

Další kroky