Delen via


Levenscyclus-gebeurtenissen van MQTT-clients

Met clientlevenscyclus-gebeurtenissen kunnen toepassingen reageren op gebeurtenissen over de clientverbindingsstatus of de clientresourcebewerkingen. Hiermee kunt u het volgende doen:

  • Controleer de verbindingsstatus van uw clients. U kunt bijvoorbeeld een toepassing bouwen waarmee de verbindingen van clients worden geanalyseerd om het gedrag te optimaliseren.
  • Reageren met een beperkingsactie voor clientafbreken. U kunt bijvoorbeeld een toepassing bouwen die een stroom voor automatische beperking initieert of een ondersteuningsticket maakt telkens wanneer een client wordt losgekoppeld.
  • Houd de naamruimte bij waaraan uw clients zijn gekoppeld. Controleer bijvoorbeeld of uw clients zijn verbonden met de juiste naamruimte nadat u een failover hebt gestart.

Gebeurtenistypen

De Event Grid-naamruimte publiceert de volgende gebeurtenistypen:

Gebeurtenistype: Beschrijving
Microsoft.EventGrid.MQTTClientSession Verbinding maken ed Gepubliceerd wanneer de sessie van een MQTT-client is verbonden met Event Grid.
Microsoft.EventGrid.MQTTClientSessionDisconnected Gepubliceerd wanneer de sessie van een MQTT-client wordt verbroken met Event Grid.
Microsoft.EventGrid.MQTTClientCreatedOrUpdated Gepubliceerd wanneer een MQTT-client wordt gemaakt of bijgewerkt in de Event Grid-naamruimte.
Microsoft.EventGrid.MQTTClientDeleted Gepubliceerd wanneer een MQTT-client wordt verwijderd uit de Event Grid-naamruimte.

Gebeurtenisschema

De levenscyclusgebeurtenissen van de client bieden u alle informatie over de client en sessie die is verbonden of verbroken. Het biedt ook een disconnectionReason die u kunt gebruiken voor diagnostische scenario's, omdat u hiermee geautomatiseerde beperkende acties kunt uitvoeren.

Deze voorbeeldgebeurtenis toont het schema van een gebeurtenis die wordt gegenereerd wanneer de sessie van een MQTT-client is verbonden met een 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
  }
}]

Deze voorbeeldgebeurtenis toont het schema van een gebeurtenis die wordt gegenereerd wanneer de sessie van een MQTT-client is verbroken met 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"
  }
}]

Deze voorbeeldgebeurtenis toont het schema van een gebeurtenis die wordt gegenereerd wanneer een MQTT-client wordt gemaakt of bijgewerkt in de Event Grid-naamruimte:

[{
  "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"
    }
  }
}]

Deze voorbeeldgebeurtenis toont het schema van een gebeurtenis die wordt gegenereerd wanneer een MQTT-client wordt verwijderd uit de Event Grid-naamruimte:

[{
  "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"
  }
}]

Redenen voor verbroken verbinding:

De volgende lijst bevat informatie over de verschillende waarden voor de disconnectionReason en de bijbehorende beschrijving:

Reden voor verbroken verbinding Beschrijving
ClientAuthenticationError de client is om verificatieredenen verbroken (bijvoorbeeld het certificaat is verlopen, de client is uitgeschakeld of de clientconfiguratie is gewijzigd)
ClientAuthorizationError de client is om autorisatieredenen verbroken (bijvoorbeeld vanwege een wijziging in de configuratie van onderwerpruimten, machtigingsbindingen of clientgroepen)
ClientError de client een ongeldige aanvraag heeft verzonden of een van de niet-ondersteunde functies heeft gebruikt die tot een beëindiging van de verbinding door de service hebben geleid.
ClientInitiatedDisconnect de client initieert een probleemloze verbinding via een DISCONNECT-pakket voor MQTT of een gesloten frame voor MQTT via WebSocket.
Verbinding maken ionLost de client-serververbinding is verbroken.
IpForbidden het IP-adres van de client wordt geblokkeerd door het IP-filter of de configuratie van privékoppelingen.
QuotaExceeded de client heeft een of meer van de beperkingslimieten overschreden die tot een beëindiging van de verbinding door de service hebben geleid.
ServerError de verbinding is beëindigd vanwege een onverwachte serverfout
ServerInitiatedDisconnect de server een probleemloze verbinding tot gevolg heeft om welke operationele reden dan ook
SessionOverflow de wachtrij van de client voor niet-bekende QoS1-berichten heeft de limiet bereikt, wat heeft geresulteerd in een beëindiging van de verbinding door de server
SessionTakenOver de client opnieuw verbinding heeft gemaakt met dezelfde verificatienaam, wat heeft geresulteerd in de beëindiging van de vorige verbinding.

Zie gebeurtenisschema voor Event Grid-naamruimte voor een gedetailleerde beschrijving van elke eigenschap.

Tip

Het verwerken van hoge schommelingen in verbindingsstatussen: wanneer een gebeurtenis voor de verbinding van de client wordt ontvangen, wacht u op een periode (bijvoorbeeld 30 seconden) en controleert u of de client nog offline is voordat u een beperkende actie onderneemt. Deze optimalisatie verbetert de efficiëntie bij het verwerken van snel veranderende statussen.

Configuratie

Configuratie van Azure Portal

Gebruik de volgende stappen om de levenscyclus van de client te verzenden:

  1. Ga in de naamruimte naar het tabblad Gebeurtenissen.
  2. Selecteer +Gebeurtenisabonnement.
    • Geef een naam op voor uw Event Grid-abonnement.
    • Selecteer het gebeurtenisschema dat u wilt gebruiken voor gebeurtenisverbruik.
    • Filter de gebeurtenissen onder Gebeurtenistypen.
    • Vul uw eindpuntgegevens in.
  3. Selecteer Maken.

Azure CLI-configuratie

Gebruik de volgende stappen om de levenscyclus van de client te verzenden:

  1. Een systeemonderwerp maken
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. Een Event Grid-abonnement maken
  az eventgrid system-topic event-subscription create --name <Specify Event Subscription Name> -g <Resource Group> --system-topic-name <System Topic Name> --endpoint <Endpoint>

Gedrag:

  • Er is geen latentiegarantie voor de levenscyclus van de client. De statusgebeurtenissen van de clientverbinding geven de laatst gerapporteerde status van de verbinding van de clientsessie aan, niet de realtime verbindingsstatus.
  • Er kunnen dubbele gebeurtenissen voor de levenscyclus van de client worden gepubliceerd.
  • De tijdstempel van de levenscyclus van de client geeft aan wanneer de service de gebeurtenissen heeft gedetecteerd, wat kan afwijken van de werkelijke tijd van de gebeurtenis.
  • De volgorde van gebeurtenissen van de levenscyclus van de klant is niet gegarandeerd, gebeurtenissen kunnen buiten de volgorde komen. Het volgnummer van de verbindingsstatus gebeurtenissen kan echter worden gebruikt om de oorspronkelijke volgorde van de gebeurtenissen te bepalen.
  • Voor de door de client gemaakte of bijgewerkte gebeurtenis en de gebeurtenis Client verwijderd:
    • Als er binnen een korte tijd meerdere statuswijzigingen in de clientresource zijn, wordt er één gebeurtenis verzonden voor de uiteindelijke status van de client.
    • Voorbeeld 1: als een client wordt gemaakt en vervolgens tweemaal binnen 3 seconden wordt bijgewerkt, verzendt EG slechts één MQTTClientCreatedOrUpdated-gebeurtenis met de uiteindelijke waarden voor de metagegevens van de client.
    • Voorbeeld 2: als een client wordt gemaakt en vervolgens binnen 5 seconden wordt verwijderd, verzendt EG alleen de gebeurtenis MQTTClientDeleted.

Gebeurtenissen van de verbindingsstatus bestellen:

Het volgnummer van de MQTTClientSession Verbinding maken ed- en MQTTClientSessionDisconnected-gebeurtenissen kan worden gebruikt om de laatst gerapporteerde status van de verbinding van de clientsessie te bepalen wanneer het volgnummer wordt verhoogd met elke nieuwe gebeurtenis. Het volgnummer voor de MQTTClientSessionDisconnected komt altijd overeen met het volgnummer van de MQTTClientSession Verbinding maken ed-gebeurtenis voor dezelfde verbinding. De onderstaande lijst met gebeurtenissen en volgnummers is bijvoorbeeld een voorbeeld van gebeurtenissen in de juiste volgorde voor dezelfde client:

  • MQTTClientSession Verbinding maken ed > "sequenceNumber": 1
  • MQTTClientSessionDisconnected > "sequenceNumber": 1
  • MQTTClientSession Verbinding maken ed > "sequenceNumber": 2
  • MQTTClientSessionDisconnected > "sequenceNumber": 2

Hier volgt een voorbeeldlogica om de gebeurtenissen te orden: Voor elke client:

  • Sla het volgnummer en de verbindingsstatus van de eerste gebeurtenis op.
  • Voor elke nieuwe MQTTClientSession Verbinding maken ed-gebeurtenis:
    • als het nieuwe volgnummer groter is dan het vorige nummer, werkt u het volgnummer en de verbindingsstatus bij zodat deze overeenkomt met de nieuwe gebeurtenis.
  • Voor elke nieuwe MQTTClientSessionDisconnected-gebeurtenis:
    • als het nieuwe volgnummer gelijk is aan of groter is dan de vorige, werkt u het volgnummer en de verbindingsstatus bij zodat deze overeenkomt met de nieuwe gebeurtenis.

Volgende stappen