Aracılığıyla paylaş


MQTT İstemcileri Yaşam Döngüsü Olayları

İstemci Yaşam Döngüsü olayları, uygulamaların istemci bağlantı durumu veya istemci kaynak işlemleriyle ilgili olaylara tepki vermesine olanak tanır. Şunları yapmanızı sağlar:

  • İstemcilerinizin bağlantı durumunu izleyin. Örneğin, davranışı iyileştirmek için istemcilerin bağlantılarını analiz eden bir uygulama oluşturabilirsiniz.
  • İstemci bağlantısı kesilmeleri için bir azaltma eylemiyle tepki gösterin. Örneğin, otomatik azaltma akışı başlatan bir uygulama oluşturabilir veya bir istemcinin bağlantısı her kesildiğinde bir destek bileti oluşturabilirsiniz.
  • İstemcilerinizin bağlı olduğu ad alanını izleyin. Örneğin, yük devretmeyi başlattıktan sonra istemcilerinizin doğru ad alanına bağlandığını onaylayın.

Olay tipleri

Event Grid ad alanı aşağıdaki olay türlerini yayımlar:

Olay türü Açıklama
Microsoft.EventGrid.MQTTClientSession Bağlan ed Bir MQTT istemcisinin oturumu Event Grid'e bağlandığında yayımlanır.
Microsoft.EventGrid.MQTTClientSessionDisconnected Bir MQTT istemcisinin oturum bağlantısı Event Grid ile kesildiğinde yayımlanır.
Microsoft.EventGrid.MQTTClientCreatedOrUpdated Event Grid Ad Alanında bir MQTT istemcisi oluşturulduğunda veya güncelleştirildiğinde yayımlanır.
Microsoft.EventGrid.MQTTClientDeleted Bir MQTT istemcisi Event Grid Ad Alanından silindiğinde yayımlanır.

Olay şeması

İstemci yaşam döngüsü olayları, bağlanan veya bağlantısı kesilen istemci ve oturum hakkındaki tüm bilgileri sağlar. Ayrıca otomatik azaltma eylemlerine sahip olmanıza olanak sağladığı için tanılama senaryoları için kullanabileceğiniz bir disconnectionReason sağlar.

Bu örnek olay, bir MQTT istemcisinin oturumu bir Event Grid'e bağlandığında oluşturulan olayın şemasını gösterir:

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

Bu örnek olay, bir MQTT istemcisinin oturumunun Event Grid ile bağlantısı kesildiğinde oluşturulan olayın şemasını gösterir:

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

Bu örnek olay, Event Grid Ad Alanında bir MQTT istemcisi oluşturulduğunda veya güncelleştirildiğinde oluşturulan bir olayın şemasını gösterir:

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

Bu örnek olay, bir MQTT istemcisi Event Grid Ad Alanından silindiğinde oluşturulan bir olayın şemasını gösterir:

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

Bağlantı kesilme nedenleri:

Aşağıdaki listede disconnectionReason için farklı değerler ve açıklamaları ayrıntılı olarak yer alır:

Bağlantı Kesilme Nedeni Açıklama
ClientAuthenticationError herhangi bir kimlik doğrulaması nedeniyle istemcinin bağlantısı kesildi (örneğin, sertifikanın süresi doldu, istemci devre dışı bırakıldı veya istemci yapılandırması değiştirildi)
ClientAuthorizationError herhangi bir yetkilendirme nedeniyle istemcinin bağlantısı kesildi (örneğin, konu alanlarının, izin bağlamalarının veya istemci gruplarının yapılandırmasındaki bir değişiklik nedeniyle)
ClientError istemci hatalı bir istek gönderdi veya hizmet tarafından bağlantının sonlandırılmasına neden olan desteklenmeyen özelliklerden birini kullandı.
ClientInitiatedDisconnect istemci, MQTT için DISCONNECT paketi veya WebSocket üzerinden MQTT için yakın çerçeve aracılığıyla düzgün bir bağlantı kesme işlemi başlatır.
Bağlan ionLost istemci-sunucu bağlantısı kesildi.
IpForbidden istemcinin IP adresi IP filtresi veya Özel bağlantılar yapılandırması tarafından engellenir.
QuotaExceeded istemci, hizmet tarafından bağlantının sonlandırılmasına neden olan azaltma sınırlarının birini veya daha fazlasını aştı.
ServerError Beklenmeyen bir sunucu hatası nedeniyle bağlantı sonlandırıldı
ServerInitiatedDisconnect sunucu herhangi bir işlemsel nedenle düzgün bir bağlantı kesme işlemi başlatır
SessionOverflow İstemcinin tanınmayan QoS1 iletileri kuyruğu sınırına ulaştı ve bu da sunucu tarafından bağlantının sonlandırılmasına neden oldu
SessionTakenOver istemcisi aynı kimlik doğrulama adıyla yeniden bağlandı ve bu da önceki bağlantının sonlandırılmasına neden oldu.

Her özelliğin ayrıntılı açıklaması için bkz . Event Grid Ad Alanı için olay şeması.

Bahşiş

Bağlantı durumlarındaki yüksek dalgalanma oranını işleme: İstemci bağlantısı kesme olayı alındığında, bir süre bekleyin (örneğin, 30 saniye) ve hafifletici bir eylem gerçekleştirmeden önce istemcinin hala çevrimdışı olduğunu doğrulayın. Bu iyileştirme, hızla değişen durumların işlenmesinde verimliliği artırır.

Yapılandırma

Azure portal yapılandırması

İstemci yaşam döngüsü olaylarını yaymak için aşağıdaki adımları kullanın:

  1. Ad alanında Olaylar sekmesine gidin.
  2. +Olay Aboneliği'ne tıklayın.
    • Event Grid aboneliğiniz için bir ad belirtin.
    • Olay tüketimi için tercih ettiğiniz Olay Şemasını seçin.
    • Olay Türleri altındaki olayları filtreleyin.
    • Uç nokta ayrıntılarınızı doldurun.
  3. Oluştur’u seçin.

Azure CLI yapılandırması

İstemci yaşam döngüsü olaylarını yaymak için aşağıdaki adımları kullanın:

  1. Sistem konusu oluşturma
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 Aboneliği Oluşturma
  az eventgrid system-topic event-subscription create --name <Specify Event Subscription Name> -g <Resource Group> --system-topic-name <System Topic Name> --endpoint <Endpoint>

Davranış:

  • İstemci yaşam döngüsü olayları için gecikme garantisi yoktur. İstemci bağlantı durumu olayları, gerçek zamanlı bağlantı durumunu değil, istemci oturumu bağlantısının bildirilen son durumunu gösterir.
  • Yinelenen istemci yaşam döngüsü olayları yayımlanabilir.
  • İstemci yaşam döngüsü olaylarının zaman damgası, hizmetin olayları ne zaman algıladığı gösterir ve bu durum olayın gerçek saatinden farklı olabilir.
  • İstemci yaşam döngüsü olaylarının sırası garanti değildir, olaylar sıra dışı gelebilir. Ancak, bağlantı durumu olaylarının sıra numarası olayların özgün sırasını belirlemek için kullanılabilir.
  • İstemci Oluşturuldu veya Güncelleştirildi olayı ve İstemci Silindi olayı için:
    • kısa bir süre içinde istemci kaynağında birden çok durum değişikliği varsa, istemcinin son durumu için bir olay yayılır.
    • Örnek 1: bir istemci oluşturulursa ve 3 saniye içinde iki kez güncelleştirilirse EG, istemcinin meta verilerinin son değerleriyle yalnızca bir MQTTClientCreatedOrUpdated olayı yayar.
    • Örnek 2: bir istemci oluşturulursa ve 5 saniye içinde silinirse, EG yalnızca MQTTClientDeleted olayını yayar.

Bağlantı durumu olaylarını sipariş et:

MQTTClientSession Bağlan ed ve MQTTClientSessionDisconnected olaylarında sıra numarası, her yeni olayla artırıldığından istemci oturumu bağlantısının bildirilen son durumunu belirlemek için kullanılabilir. MQTTClientSessionDisconnected için sıra numarası her zaman aynı bağlantı için MQTTClientSession Bağlan ed olayının sıra numarasıyla eşleşir. Örneğin, aşağıdaki olayların ve sıra numaralarının listesi, aynı istemci için doğru sırada olayların bir örneğidir:

  • MQTTClientSession Bağlan ed > "sequenceNumber": 1
  • MQTTClientSessionDisconnected > "sequenceNumber": 1
  • MQTTClientSession Bağlan ed > "sequenceNumber": 2
  • MQTTClientSessionDisconnected > "sequenceNumber": 2

Olayları sıralamak için örnek bir mantık aşağıda verilmiştir: Her istemci için:

  • İlk olaydaki sıra numarasını ve bağlantı durumunu depolayın.
  • Her yeni MQTTClientSession Bağlan ed olayı için:
    • Yeni sıra numarası öncekinden büyükse, sıra numarasını ve bağlantı durumunu yeni olayla eşleşecek şekilde güncelleştirin.
  • Her yeni MQTTClientSessionDisconnected olayı için:
    • Yeni sıra numarası öncekine eşit veya ondan büyükse, sıra numarasını ve bağlantı durumunu yeni olayla eşleşecek şekilde güncelleştirin.

Sonraki adımlar

  • Sistem konuları hakkında daha fazla bilgi edinmek için Azure Event Grid'de Sistem konuları'na gidin
  • İstemci yaşam döngüsü olay özellikleri hakkında daha fazla bilgi edinmek için Event Grid'e Event Grid kaynağı olarak gidin