Bagikan melalui


Peristiwa Siklus Hidup Klien MQTT

Peristiwa Siklus Hidup Klien memungkinkan aplikasi untuk bereaksi terhadap peristiwa tentang status koneksi klien atau operasi sumber daya klien. Ini memungkinkan Anda untuk:

  • Pantau status koneksi klien Anda. Misalnya, Anda dapat membangun aplikasi yang menganalisis koneksi klien untuk mengoptimalkan perilaku.
  • Bereaksi dengan tindakan mitigasi untuk pemutusan sambungan klien. Misalnya, Anda dapat membangun aplikasi yang memulai alur mitigasi otomatis atau membuat tiket dukungan setiap kali klien terputus.
  • Lacak namespace layanan tempat klien Anda dilampirkan. Misalnya, konfirmasikan bahwa klien Anda tersambung ke namespace yang tepat setelah Anda memulai failover.

Tipe peristiwa

Namespace Layanan Event Grid menerbitkan jenis peristiwa berikut:

Jenis peristiwa Keterangan
Microsoft.EventGrid.MQTTClientSession Koneksi ed Diterbitkan saat sesi klien MQTT tersambung ke Event Grid.
Microsoft.EventGrid.MQTTClientSessionDisconnected Diterbitkan saat sesi klien MQTT terputus dari Event Grid.
Microsoft.EventGrid.MQTTClientCreatedOrUpdated Diterbitkan saat klien MQTT dibuat atau diperbarui di Namespace Layanan Event Grid.
Microsoft.EventGrid.MQTTClientDeleted Diterbitkan saat klien MQTT dihapus dari Namespace Layanan Event Grid.

Skema peristiwa

Peristiwa siklus hidup klien memberi Anda semua informasi tentang klien dan sesi yang tersambung atau terputus. Ini juga menyediakan pemutusanReason yang dapat Anda gunakan untuk skenario diagnostik karena memungkinkan Anda memiliki tindakan mitigasi otomatis.

Contoh peristiwa ini menunjukkan skema peristiwa yang dimunculkan saat sesi klien MQTT tersambung ke 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
  }
}]

Contoh peristiwa ini menunjukkan skema peristiwa yang dimunculkan ketika sesi klien MQTT terputus ke 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"
  }
}]

Contoh peristiwa ini menunjukkan skema peristiwa yang dimunculkan saat klien MQTT dibuat atau diperbarui di Namespace Layanan 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"
    }
  }
}]

Contoh peristiwa ini menunjukkan skema peristiwa yang dimunculkan saat klien MQTT dihapus dari Namespace Layanan 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"
  }
}]

Alasan Pemutusan:

Daftar berikut merinci nilai yang berbeda untuk pemutusanReason dan deskripsinya:

Alasan Pemutusan Deskripsi
ClientAuthenticationError klien terputus karena alasan autentikasi apa pun (misalnya, sertifikat kedaluwarsa, klien dinonaktifkan, atau konfigurasi klien berubah)
ClientAuthorizationError klien terputus karena alasan otorisasi apa pun (misalnya, karena perubahan konfigurasi ruang topik, pengikatan izin, atau grup klien)
ClientError klien mengirim permintaan buruk atau menggunakan salah satu fitur yang tidak didukung yang mengakibatkan penghentian koneksi oleh layanan.
ClientInitiatedDisconnect klien memulai pemutusan sambungan yang anggun melalui paket DISCONNECT untuk MQTT atau bingkai dekat untuk MQTT melalui WebSocket.
Koneksi ionLost koneksi server klien hilang.
IpForbidden alamat IP klien diblokir oleh filter IP atau konfigurasi Tautan privat.
QuotaExceeded klien melebihi satu atau beberapa batas pembatasan yang mengakibatkan penghentian koneksi oleh layanan.
ServerError koneksi dihentikan karena kesalahan server yang tidak terduga
ServerInitiatedDisconnect server memulai pemutusan sambungan yang anggun karena alasan operasional apa pun
SessionOverflow antrean klien untuk pesan QoS1 yang tidak diakui mencapai batasnya, yang mengakibatkan penghentian koneksi oleh server
SessionTakenOver klien terhubung kembali dengan nama autentikasi yang sama, yang mengakibatkan penghentian koneksi sebelumnya.

Untuk deskripsi terperinci tentang setiap properti, lihat skema peristiwa untuk Namespace Event Grid.

Tip

Menangani tingkat fluktuasi tinggi dalam status koneksi: Ketika peristiwa pemutusan klien diterima, tunggu periode (misalnya, 30 detik) dan verifikasi bahwa klien masih offline sebelum mengambil tindakan mitigasi. Pengoptimalan ini meningkatkan efisiensi dalam menangani status yang berubah dengan cepat.

Konfigurasi

Konfigurasi portal Microsoft Azure

Gunakan langkah-langkah berikut untuk memancarkan peristiwa siklus hidup klien:

  1. Di namespace, buka tab Peristiwa.
  2. Pilih +Langganan Peristiwa.
    • Berikan nama untuk langganan Event Grid Anda.
    • Pilih Skema Peristiwa yang Anda sukai untuk konsumsi peristiwa.
    • Filter peristiwa di bawah Jenis Peristiwa.
    • Isi detail titik akhir Anda.
  3. Pilih Buat.

Konfigurasi CLI Azure

Gunakan langkah-langkah berikut untuk memancarkan peristiwa siklus hidup klien:

  1. Membuat topik sistem
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. Membuat Langganan Event Grid
  az eventgrid system-topic event-subscription create --name <Specify Event Subscription Name> -g <Resource Group> --system-topic-name <System Topic Name> --endpoint <Endpoint>

Perilaku:

  • Tidak ada jaminan latensi untuk peristiwa siklus hidup klien. Peristiwa status koneksi klien menunjukkan status terakhir yang dilaporkan dari koneksi sesi klien, bukan status koneksi real-time.
  • Peristiwa siklus hidup klien duplikat dapat diterbitkan.
  • Tanda waktu peristiwa siklus hidup klien menunjukkan kapan layanan mendeteksi peristiwa, yang mungkin berbeda dari waktu aktual peristiwa.
  • Urutan peristiwa siklus hidup klien tidak dijamin, peristiwa mungkin tidak berurutan. Namun, nomor urut pada peristiwa status koneksi dapat digunakan untuk menentukan urutan asli peristiwa.
  • Untuk peristiwa Klien yang Dibuat atau Diperbarui dan peristiwa Klien Dihapus:
    • Jika ada beberapa perubahan status pada sumber daya klien dalam waktu singkat, akan ada satu peristiwa yang dipancarkan untuk status akhir klien.
    • Contoh 1: jika klien dibuat, maka diperbarui dua kali dalam 3 detik, EG hanya akan memancarkan satu peristiwa MQTTClientCreatedOrUpdated dengan nilai akhir untuk metadata klien.
    • Contoh 2: jika klien dibuat, maka dihapus dalam waktu 5 detik, EG hanya akan memancarkan peristiwa MQTTClientDeleted.

Peristiwa status koneksi pesanan:

Nomor urutan pada peristiwa MQTTClientSession Koneksi ed dan MQTTClientSessionDisconnected dapat digunakan untuk menentukan status terakhir yang dilaporkan dari koneksi sesi klien karena nomor urut bertahap dengan setiap peristiwa baru. Nomor urut untuk MQTTClientSessionDisconnected selalu cocok dengan nomor urut peristiwa MQTTClientSession Koneksi ed untuk koneksi yang sama. Misalnya, daftar peristiwa dan nomor urut di bawah ini adalah sampel peristiwa dalam urutan yang tepat untuk klien yang sama:

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

Berikut adalah contoh logika untuk mengurutkan peristiwa: Untuk setiap klien:

  • Simpan nomor urut dan status koneksi dari peristiwa pertama.
  • Untuk setiap peristiwa MQTTClientSession Koneksi ed baru:
    • jika nomor urutan baru lebih besar dari yang sebelumnya, perbarui nomor urut dan status koneksi agar sesuai dengan peristiwa baru.
  • Untuk setiap peristiwa MQTTClientSessionDisconnected baru:
    • jika nomor urutan baru sama atau lebih besar dari yang sebelumnya, perbarui nomor urut dan status koneksi agar sesuai dengan peristiwa baru.

Langkah berikutnya