Dela via


Livscykelhändelser för MQTT-klienter

Med händelser i klientlivscykeln kan program reagera på händelser om klientanslutningsstatus eller klientresursåtgärder. Det gör att du kan:

  • Övervaka klienternas anslutningsstatus. Du kan till exempel skapa ett program som analyserar klienternas anslutningar för att optimera beteendet.
  • Reagera med en åtgärd för att åtgärda klientfrånkopplingar. Du kan till exempel skapa ett program som initierar ett automatiskt åtgärdsflöde eller skapar ett supportärende varje gång en klient kopplas från.
  • Spåra det namnområde som dina klienter är anslutna till. Kontrollera till exempel att dina klienter är anslutna till rätt namnområde när du har initierat en redundansväxling.

Händelsetyper

Event Grid-namnområdet publicerar följande händelsetyper:

Händelsetyp Beskrivning
Microsoft.EventGrid.MQTTClientSession Anslut ed Publicerad när en MQTT-klients session är ansluten till Event Grid.
Microsoft.EventGrid.MQTTClientSessionDisconnected Publicerad när en MQTT-klients session kopplas från Event Grid.
Microsoft.EventGrid.MQTTClientCreatedOrUpdated Publicerad när en MQTT-klient skapas eller uppdateras i Event Grid-namnområdet.
Microsoft.EventGrid.MQTTClientDeleted Publicerad när en MQTT-klient tas bort från Event Grid-namnområdet.

Händelseschema

Händelser i klientens livscykel ger dig all information om klienten och sessionen som anslöts eller kopplades från. Det ger också en disconnectionReason som du kan använda för diagnostikscenarier eftersom det gör att du kan ha automatiserade åtgärder för att mildra.

Den här exempelhändelsen visar schemat för en händelse som genereras när en MQTT-klients session är ansluten till ett Event Grid:

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

Den här exempelhändelsen visar schemat för en händelse som genereras när en MQTT-klients session kopplas från till Event Grid:

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

Den här exempelhändelsen visar schemat för en händelse som genereras när en MQTT-klient skapas eller uppdateras i Event Grid-namnområdet:

[{
  "specversion": "1.0",
  "id": "383d1562-c95f-4095-936c-688e72c6b2bb",
  "time": "2023-07-29T01:14:35.8928724Z",
  "type": "Microsoft.EventGrid.MQTTClientCreatedOrUpdated",
  "source": "/subscriptions/00000000-0000-0000-0000-000000000000/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"
    }
  }
}]

Den här exempelhändelsen visar schemat för en händelse som genereras när en MQTT-klient tas bort från Event Grid-namnområdet:

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

Orsak till frånkoppling:

Följande lista beskriver de olika värdena för disconnectionReason och deras beskrivning:

Orsak till frånkoppling beskrivning
ClientAuthenticationError klienten kopplades från av autentiseringsskäl (till exempel att certifikatet upphörde att gälla, klienten inaktiverades eller att klientkonfigurationen ändrades)
ClientAuthorizationError klienten kopplades från av auktoriseringsskäl (till exempel på grund av en ändring i konfigurationen av ämnesutrymmen, behörighetsbindningar eller klientgrupper)
ClientError klienten skickade en felaktig begäran eller använde en av de funktioner som inte stöds och som resulterade i att tjänsten avslutade anslutningen.
ClientInitiatedDisconnect klienten initierar en graciös frånkoppling via ett DISCONNECT-paket för MQTT eller en nära ram för MQTT över WebSocket.
Anslut ionLost klientserveranslutningen går förlorad.
IpForbidden klientens IP-adress blockeras av IP-filter eller konfiguration av privata länkar.
QuotaExceeded klienten överskred en eller flera av de begränsningsgränser som ledde till att tjänsten avslutade anslutningen.
ServerError anslutningen avbröts på grund av ett oväntat serverfel
ServerInitiatedDisconnect servern initierar en graciös frånkoppling av någon driftsorsak
SessionOverflow klientens kö för obemärkta QoS1-meddelanden nådde sin gräns, vilket resulterade i att servern avslutade anslutningen
SessionTakenOver klienten återansluts med samma autentiseringsnamn, vilket resulterade i att den tidigare anslutningen avslutades.

En detaljerad beskrivning av varje egenskap finns i händelseschemat för Event Grid-namnområdet.

Dricks

Hantera hög fluktuationer i anslutningstillstånd: När en klient frånkopplingshändelse tas emot väntar du en period (till exempel 30 sekunder) och kontrollerar att klienten fortfarande är offline innan du vidtar en åtgärd. Den här optimeringen förbättrar effektiviteten i hanteringen av snabbt föränderliga tillstånd.

Konfiguration

Konfiguration av Azure-portalen

Använd följande steg för att generera klientens livscykelhändelser:

  1. I namnområdet går du till fliken Händelser.
  2. Välj +Händelseprenumeration.
    • Ange ett namn för din Event Grid-prenumeration.
    • Välj det händelseschema som du föredrar för händelseförbrukning.
    • Filtrera händelserna under Händelsetyper.
    • Fyll i slutpunktsinformationen.
  3. Välj Skapa.

Konfiguration av Azure CLI

Använd följande steg för att generera klientens livscykelhändelser:

  1. Skapa ett systemämne
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. Skapa en Event Grid-prenumeration
  az eventgrid system-topic event-subscription create --name <Specify Event Subscription Name> -g <Resource Group> --system-topic-name <System Topic Name> --endpoint <Endpoint>

Beteende:

  • Det finns ingen svarstidsgaranti för klientens livscykelhändelser. Statushändelserna för klientanslutningen anger det senast rapporterade tillståndet för klientsessionens anslutning, inte status för realtidsanslutning.
  • Dubbletter av klientlivscykelhändelser kan publiceras.
  • Tidsstämpeln för klientlivscykelns händelser anger när tjänsten identifierade händelserna, vilket kan skilja sig från den faktiska tiden för händelsen.
  • Ordningen på klientlivscykelhändelser garanteras inte, händelser kan komma i oordning. Sekvensnumret för anslutningsstatushändelserna kan dock användas för att fastställa den ursprungliga ordningen för händelserna.
  • För händelsen Skapad eller Uppdaterad av klienten och händelsen Borttagen klient:
    • Om det finns flera tillståndsändringar i klientresursen inom en kort tid genereras en händelse för klientens slutliga tillstånd.
    • Exempel 1: Om en klient skapas och sedan uppdateras två gånger inom 3 sekunder genererar EG bara en MQTTClientCreatedOrUpdated-händelse med de slutliga värdena för klientens metadata.
    • Exempel 2: Om en klient skapas och sedan tas bort inom 5 sekunder genererar EG endast en MQTTClientDeleted-händelse.

Orderanslutningsstatushändelser:

Sekvensnumret på händelserna MQTTClientSession Anslut ed och MQTTClientSessionDisconnected kan användas för att fastställa det senaste rapporterade tillståndet för klientsessionens anslutning eftersom sekvensnumret ökas med varje ny händelse. Sekvensnumret för MQTTClientSessionDisconnected matchar alltid sekvensnumret för MQTTClientSession Anslut ed-händelsen för samma anslutning. Listan över händelser och sekvensnummer nedan är till exempel ett exempel på händelser i rätt ordning för samma klient:

  • MQTTClientSession Anslut ed > "sequenceNumber": 1
  • MQTTClientSessionDisconnected > "sequenceNumber": 1
  • MQTTClientSession Anslut ed > "sequenceNumber": 2
  • MQTTClientSessionDisconnected > "sequenceNumber": 2

Här är en exempellogik för att beställa händelserna: För varje klient:

  • Lagra sekvensnumret och anslutningsstatusen från den första händelsen.
  • För varje ny MQTTClientSession Anslut händelse:
    • Om det nya sekvensnumret är större än det föregående uppdaterar du sekvensnumret och anslutningsstatusen så att det matchar den nya händelsen.
  • För varje ny MQTTClientSessionDisconnected-händelse:
    • Om det nya sekvensnumret är lika med eller större än det föregående uppdaterar du sekvensnumret och anslutningsstatusen så att det matchar den nya händelsen.

Nästa steg