Megosztás a következőn keresztül:


MQTT-ügyfelek életciklus-eseményei

Az ügyfél életciklus-eseményei lehetővé teszik, hogy az alkalmazások reagáljanak az ügyfélkapcsolat állapotával vagy az ügyfélerőforrás-műveletekkel kapcsolatos eseményekre. Lehetővé teszi, hogy:

  • Az ügyfelek kapcsolati állapotának figyelése. Létrehozhat például egy alkalmazást, amely elemzi az ügyfelek kapcsolatait a viselkedés optimalizálása érdekében.
  • Reagáljon egy kockázatcsökkentő művelettel az ügyfél leválasztása érdekében. Létrehozhat például egy alkalmazást, amely automatikus kárenyhítési folyamatot kezdeményez, vagy létrehozhat egy támogatási jegyet minden alkalommal, amikor az ügyfél leválasztása történik.
  • Nyomon követheti az ügyfelek által csatolt névteret. Győződjön meg például arról, hogy az ügyfelek a feladatátvétel kezdeményezése után a megfelelő névtérhez csatlakoznak.

Eseménytípusok

Az Event Grid-névtér a következő eseménytípusokat teszi közzé:

Esemény típusa Ismertetés
Microsoft.EventGrid.MQTTClientSession Csatlakozás ed Közzétéve, ha egy MQTT-ügyfél munkamenete csatlakozik az Event Gridhez.
Microsoft.EventGrid.MQTTClientSessionDisconnected Közzétéve, ha egy MQTT-ügyfél munkamenete le van választva az Event Gridről.
Microsoft.EventGrid.MQTTClientCreatedOrUpdated MQTT-ügyfél létrehozásakor vagy frissítésekor jelenik meg az Event Grid-névtérben.
Microsoft.EventGrid.MQTTClientDeleted Akkor jelenik meg, ha egy MQTT-ügyfél törlődik az Event Grid-névtérből.

Eseményséma

Az ügyfél életciklus-eseményei minden információt megadnak a csatlakoztatott vagy leválasztott ügyfélről és munkamenetről. Emellett egy leválasztásireazont is biztosít, amelyet diagnosztikai forgatókönyvekhez használhat, mivel lehetővé teszi az automatikus enyhítési műveletek végrehajtását.

Ez a mintaesemény egy esemény sémáját mutatja be, amely akkor merült fel, amikor egy MQTT-ügyfél munkamenete egy Event Gridhez csatlakozik:

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

Ez a mintaesemény egy esemény sémáját mutatja be, amely akkor merült fel, amikor egy MQTT-ügyfél munkamenete leválasztva van az Event Gridről:

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

Ez a mintaesemény egy MQTT-ügyfél létrehozásakor vagy frissítésekor az Event Grid-névtérben létrehozott vagy frissített esemény sémáját mutatja be:

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

Ez a mintaesemény egy MQTT-ügyfélnek az Event Grid-névtérből való törlésekor létrehozott esemény sémáját mutatja be:

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

Leválasztási okok:

Az alábbi lista a disconnectionReason különböző értékeit és azok leírását ismerteti:

Leválasztási ok Leírás
ClientAuthenticationError az ügyfél bármilyen hitelesítési okból megszakadt (például a tanúsítvány lejárt, az ügyfél le lett tiltva, vagy az ügyfél konfigurációja megváltozott)
ClientAuthorizationError az ügyfél bármilyen engedélyezési okból megszakadt (például a témakörtérek, engedélykötések vagy ügyfélcsoportok konfigurációjának módosítása miatt)
ClientError az ügyfél rossz kérést küldött, vagy az egyik nem támogatott szolgáltatást használta, amely a szolgáltatás által a kapcsolat megszakadását eredményezte.
ClientInitiatedDisconnect az ügyfél egy MQTT-hez tartozó DISCONNECT-csomagon vagy a WebSocketen keresztüli MQTT szoros keretén keresztül kezdeményezi a kecses leválasztást.
Csatlakozás ionLost az ügyfél-kiszolgáló kapcsolat megszakad.
IpForbidden az ügyfél IP-címét ip-szűrő vagy privát kapcsolatok konfigurálása blokkolja.
QuotaExceeded az ügyfél túllépte az egy vagy több olyan szabályozási korlátot, amely a szolgáltatás által a kapcsolat megszakadását eredményezte.
ServerError a kapcsolat váratlan kiszolgálóhiba miatt megszakadt
ServerInitiatedDisconnect a kiszolgáló bármilyen működési okból kecses leválasztást kezdeményez
SessionOverflow az ügyfél nem megismert QoS1-üzenetek üzenetsora elérte a korlátját, ami miatt a kiszolgáló megszakadt a kapcsolattal.
SessionTakenOver az ügyfél ugyanazzal a hitelesítési névvel kapcsolódott újra, ami az előző kapcsolat megszakadását eredményezte.

Az egyes tulajdonságok részletes leírását az Event Grid-névtér eseménysémában találja.

Tipp.

Magas ingadozások kezelése a kapcsolatállapotokban: Amikor egy ügyfél leválasztási eseménye érkezik, várjon egy ideig (például 30 másodpercig), és ellenőrizze, hogy az ügyfél továbbra is offline állapotban van-e, mielőtt enyhítő műveletet hajt végre. Ez az optimalizálás javítja a gyorsan változó állapotok kezelésének hatékonyságát.

Konfiguráció

Az Azure Portal konfigurálása

Az ügyfél életciklus-eseményeinek kibocsátásához kövesse az alábbi lépéseket:

  1. A névtérben lépjen az Események lapra.
  2. Válassza az +Esemény-előfizetés lehetőséget.
    • Adja meg az Event Grid-előfizetés nevét.
    • Válassza ki azt az eseménysémát, amelyet az eseményfelhasználáshoz szeretne használni.
    • Szűrje az eseményeket az Eseménytípusok csoportban.
    • Adja meg a végpont adatait.
  3. Select Create.

Az Azure CLI konfigurálása

Az ügyfél életciklus-eseményeinek kibocsátásához kövesse az alábbi lépéseket:

  1. Rendszertémakör létrehozása
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. Event Grid-előfizetés létrehozása
  az eventgrid system-topic event-subscription create --name <Specify Event Subscription Name> -g <Resource Group> --system-topic-name <System Topic Name> --endpoint <Endpoint>

Viselkedés:

  • Nincs késési garancia az ügyfél életciklus-eseményeire. Az ügyfélkapcsolati állapot eseményei az ügyfél munkamenetének legutóbbi jelentett állapotát jelzik, nem pedig a valós idejű kapcsolat állapotát.
  • Az ügyfél életciklusának ismétlődő eseményei közzétehetők.
  • Az ügyfél életciklus-eseményeinek időbélyege azt jelzi, hogy a szolgáltatás mikor észlelte az eseményeket, ami eltérhet az esemény tényleges időpontjától.
  • Az ügyfél életciklus-eseményeinek sorrendje nem garantált, előfordulhat, hogy az események sorrendből érkeznek. A kapcsolatállapot-események sorszáma azonban az események eredeti sorrendjének meghatározására használható.
  • Az ügyfél által létrehozott vagy frissített esemény és az ügyfél által törölt esemény esetében:
    • Ha rövid időn belül több állapotváltozás is történik az ügyfélerőforrásban, az ügyfél végleges állapotához egy esemény lesz kibocsátva.
    • 1. példa: ha egy ügyfél létrejön, majd 3 másodpercen belül kétszer frissül, az EG csak egy MQTTClientCreatedOrUpdated eseményt bocsát ki az ügyfél metaadatainak végső értékeivel.
    • 2. példa: ha egy ügyfél létrejön, majd 5 másodpercen belül törlődik, az EG csak MQTTClientDeleted eseményt bocsát ki.

Rendelési kapcsolat állapotának eseményei:

Az MQTTClientSession Csatlakozás ed és az MQTTClientSessionDisconnected események sorozatszáma az ügyfél-munkamenet kapcsolatának utolsó jelentett állapotának meghatározására használható, mivel a sorszám minden új eseménynél növekszik. Az MQTTClientSessionDisconnected szekvenciaszáma mindig megegyezik az MQTTClientSession Csatlakozás azonos kapcsolathoz tartozó esemény sorszámával. Az alábbi események és sorszámok listája például egy, az adott ügyfélhez megfelelő sorrendben lévő események mintája:

  • MQTTClientSession Csatlakozás ed > "sequenceNumber": 1
  • MQTTClientSessionDisconnected > "sequenceNumber": 1
  • MQTTClientSession Csatlakozás ed > "sequenceNumber": 2
  • MQTTClientSessionDisconnected > "sequenceNumber": 2

Íme egy mintalogika az események sorrendjéhez: Minden ügyfél esetében:

  • Tárolja a sorszámot és a kapcsolat állapotát az első eseményből.
  • Minden új MQTTClientSession Csatlakozás esemény esetén:
    • ha az új sorszám nagyobb, mint az előző, frissítse a sorszámot és a kapcsolat állapotát az új eseménynek megfelelően.
  • Minden új MQTTClientSessionDisconnected esemény esetén:
    • ha az új sorszám egyenlő vagy nagyobb az előzőnél, frissítse a sorszámot és a kapcsolat állapotát az új eseménynek megfelelően.

További lépések