مشاركة عبر


أحداث دورة حياة عملاء MQTT

تسمح أحداث دورة حياة العميل للتطبيقات بالتفاعل مع الأحداث المتعلقة بحالة اتصال العميل أو عمليات مورد العميل. فهو يقوم بالسماح لك بالمذكور أدناه:

  • مراقبة حالة اتصال عملائك. على سبيل المثال، يمكنك إنشاء تطبيق يحلل اتصالات العملاء لتحسين السلوك.
  • التفاعل مع إجراء تخفيف لقطع اتصال العميل. على سبيل المثال، يمكنك إنشاء تطبيق يبدأ تدفق التخفيف التلقائي أو ينشئ تذكرة دعم في كل مرة يتم فيها قطع اتصال العميل.
  • تعقب مساحة الاسم التي يتم إرفاق العملاء بها. على سبيل المثال، تأكد من اتصال العملاء بمساحة الاسم الصحيحة بعد بدء تجاوز الفشل.

أنواع الحدث

تنشر مساحة اسم Event Grid أنواع الأحداث التالية:

أنواع الحدث الوصف
Microsoft.EventGrid.MQTTClientSession الاتصال ed يتم نشرها عند توصيل جلسة عمل عميل MQTT بشبكة الأحداث.
Microsoft.EventGrid.MQTTClientSessionDisconnected يتم نشرها عند قطع اتصال جلسة عمل عميل MQTT ب Event Grid.
Microsoft.EventGrid.MQTTClientCreatedOrUpdated يتم نشره عند إنشاء عميل MQTT أو تحديثه في مساحة اسم شبكة الأحداث.
Microsoft.EventGrid.MQTTClientDeleted يتم نشره عند حذف عميل MQTT من مساحة اسم شبكة الأحداث.

Event schema

توفر لك أحداث دورة حياة العميل جميع المعلومات حول العميل والجلسة التي تم توصيلها أو قطع اتصالها. كما يوفر disconnectionReason الذي يمكنك استخدامه لسيناريوهات التشخيص لأنه يمكنك من الحصول على إجراءات تخفيف تلقائية.

يظهر هذا الحدث النموذجي مخطط حدث تم رفعه عندما تكون جلسة عمل عميل MQTT متصلة بشبكة أحداث:

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

يظهر هذا الحدث النموذجي مخطط حدث تم رفعه عند قطع اتصال جلسة عمل عميل MQTT بشبكة الأحداث:

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

يظهر هذا الحدث النموذجي مخطط حدث تم رفعه عند إنشاء عميل MQTT أو تحديثه في مساحة اسم شبكة الأحداث:

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

يظهر هذا الحدث النموذجي مخطط حدث تم رفعه عند حذف عميل MQTT من مساحة اسم شبكة الأحداث:

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

أسباب قطع الاتصال:

توضح القائمة التالية تفاصيل القيم المختلفة ل disconnectionReason ووصفها:

سبب قطع الاتصال ‏‏الوصف
ClientAuthenticationError تم قطع اتصال العميل لأي أسباب مصادقة (على سبيل المثال، انتهت صلاحية الشهادة أو تعطيل العميل أو تغيير تكوين العميل)
ClientAuthorizationError تم قطع اتصال العميل لأي أسباب تخويل (على سبيل المثال، بسبب تغيير في تكوين مسافات الموضوع أو روابط الأذونات أو مجموعات العملاء)
ClientError أرسل العميل طلبا غير صحيح أو استخدم إحدى الميزات غير المدعومة التي أدت إلى إنهاء الاتصال بواسطة الخدمة.
ClientInitiatedDisconnect يبدأ العميل قطع اتصال رشيق من خلال حزمة DISCONNECT ل MQTT أو إطار إغلاق ل MQTT عبر WebSocket.
الاتصال است يتم فقدان الاتصال بين العميل والخادم.
IpForbidden يتم حظر عنوان IP الخاص بالعميل بواسطة عامل تصفية IP أو تكوين الارتباطات الخاصة.
QuotaExceeded تجاوز العميل واحدا أو أكثر من حدود التقييد التي أدت إلى إنهاء الاتصال بواسطة الخدمة.
ServerError تم إنهاء الاتصال بسبب خطأ خادم غير متوقع
ServerInitiatedDisconnect يبدأ الخادم قطع اتصال رشيق لأي سبب تشغيلي
تجاوز جلسة العمل وصلت قائمة انتظار العميل لرسائل QoS1 غير المعترف بها إلى حدها الأقصى، مما أدى إلى إنهاء الاتصال بواسطة الخادم
SessionTakenOver تمت إعادة اتصال العميل بنفس اسم المصادقة، مما أدى إلى إنهاء الاتصال السابق.

للحصول على وصف مفصل لكل خاصية، راجع مخطط الحدث لمساحة اسم شبكة الأحداث.

تلميح

معالجة معدل عال من التقلبات في حالات الاتصال: عند تلقي حدث قطع اتصال العميل، انتظر لفترة (على سبيل المثال، 30 ثانية) وتحقق من أن العميل لا يزال غير متصل قبل اتخاذ إجراء مخفف. يحسن هذا التحسين الكفاءة في التعامل مع الحالات المتغيرة بسرعة.

التكوين

تكوين مدخل Azure

استخدم الخطوات التالية لإصدار أحداث دورة حياة العميل:

  1. في مساحة الاسم، انتقل إلى علامة التبويب الأحداث.
  2. حدد +اشتراك الحدث.
    • أدخل اسما لاشتراك Event Grid الخاص بك.
    • حدد مخطط الحدث الذي تفضله لاستهلاك الحدث.
    • تصفية الأحداث ضمن أنواع الأحداث.
    • املأ تفاصيل نقطة النهاية.
  3. حدد إنشاء.

تكوين Azure CLI

استخدم الخطوات التالية لإصدار أحداث دورة حياة العميل:

  1. قم بإنشاء موضوع النظام
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. إنشاء اشتراك شبكة الأحداث
  az eventgrid system-topic event-subscription create --name <Specify Event Subscription Name> -g <Resource Group> --system-topic-name <System Topic Name> --endpoint <Endpoint>

السلوك:

  • لا يوجد ضمان زمن انتقال لأحداث دورة حياة العميل. تشير أحداث حالة اتصال العميل إلى الحالة الأخيرة المبلغ عنها لاتصال جلسة العميل، وليس حالة الاتصال في الوقت الحقيقي.
  • قد يتم نشر أحداث دورة حياة العميل المكررة.
  • يشير الطابع الزمني لأحداث دورة حياة العميل إلى وقت اكتشاف الخدمة للأحداث، والتي قد تختلف عن الوقت الفعلي للحدث.
  • ترتيب أحداث دورة حياة العميل غير مضمون، قد تصل الأحداث خارج الترتيب. ومع ذلك، يمكن استخدام رقم التسلسل على أحداث حالة الاتصال لتحديد الترتيب الأصلي للأحداث.
  • بالنسبة إلى الحدث الذي تم إنشاؤه أو تحديثه للعميل والحدث المحذوف من العميل:
    • إذا كانت هناك تغييرات حالة متعددة على مورد العميل في غضون فترة زمنية قصيرة، فسيكون هناك حدث واحد منبعث للحالة النهائية للعميل.
    • مثال 1: إذا تم إنشاء عميل، ثم تحديثه مرتين في غضون 3 ثوان، فسيصدر EG حدث MQTTClientCreatedOrUpdated واحد فقط بالقيم النهائية لبيانات تعريف العميل.
    • مثال 2: إذا تم إنشاء عميل، ثم حذفه في غضون 5 ثوان، سيبعث EG حدث MQTTClientDeleted فقط.

ترتيب أحداث حالة الاتصال:

يمكن استخدام رقم التسلسل على الأحداث MQTTClientSession الاتصال ed وMQTTClientSessionDisconnected لتحديد الحالة الأخيرة المبلغ عنها لاتصال جلسة العميل حيث يتم زيادة رقم التسلسل مع كل حدث جديد. يتطابق رقم التسلسل ل MQTTClientSessionDisconnected دائما مع رقم تسلسل الحدث MQTTClientSession الاتصال ed لنفس الاتصال. على سبيل المثال، قائمة الأحداث وأرقام التسلسل أدناه هي عينة من الأحداث بالترتيب الصحيح لنفس العميل:

  • MQTTClientSession الاتصال ed > "sequenceNumber": 1
  • MQTTClientSessionDisconnected > "sequenceNumber": 1
  • MQTTClientSession الاتصال ed > "sequenceNumber": 2
  • MQTTClientSessionDisconnected > "sequenceNumber": 2

فيما يلي نموذج منطق لترتيب الأحداث: لكل عميل:

  • تخزين رقم التسلسل وحالة الاتصال من الحدث الأول.
  • لكل حدث MQTTClientSession الاتصال جديد:
    • إذا كان رقم التسلسل الجديد أكبر من الرقم السابق، فقم بتحديث رقم التسلسل وحالة الاتصال لمطابقة الحدث الجديد.
  • لكل حدث MQTTClientSessionDisconnected جديد:
    • إذا كان رقم التسلسل الجديد مساويا أو أكبر من الرقم السابق، فقم بتحديث رقم التسلسل وحالة الاتصال لمطابقة الحدث الجديد.

الخطوات التالية