ميزات MQTT المدعومة من قبل ميزة وسيط MQTT في Azure Event Grid

MQTT هو بروتوكول نقل رسائل النشر والاشتراك الذي تم تصميمه للبيئات المقيدة. إنها فعالة وقابلة للتطوير وموثوقة، ما جعلها المعيار الذهبي للاتصال في سيناريوهات IoT. يدعم وسيط MQTT العملاء الذين ينشرون الرسائل ويشتركون فيها عبر MQTT v3.1.1 وMQTT v3.1.1 عبر WebSockets وMQTT v5 وMQTT v5 عبر WebSockets. يدعم وسيط MQTT أيضا الاتصال عبر إصدار MQTT (MQTT 3.1.1 وMQTT 5).

قدم MQTT v5 العديد من التحسينات عبر MQTT v3.1.1 لتقديم اتصال أكثر سلاسة وشفافية وكفاءة. وأضاف:

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

تدفق الاتصال:

يجب على عملاء MQTT الاتصال عبر TLS 1.2 أو TLS 1.3. تفشل محاولات تخطي هذه الخطوة مع الاتصال.

أثناء الاتصال بوسيط MQTT، استخدم المنافذ التالية أثناء الاتصال عبر MQTT:

  • MQTT v3.1.1 وMQTT v5 على منفذ TCP 8883
  • MQTT v3.1.1 عبر WebSocket وMQTTv5 عبر WebSocket على منفذ TCP 443.

يجب أن تتضمن حزمة CONNECT الخصائص التالية:

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

تعرف على المزيد حول مصادقة العميل.

دعم متعدد الجلسات

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

تكوين مساحة الاسم

قبل استخدام هذه الميزة، تحتاج إلى تكوين مساحة الاسم للسماح بجلسات متعددة لكل عميل. استخدم الخطوات التالية لتكوين جلسات متعددة لكل عميل في مدخل Microsoft Azure:

  • انتقل إلى مساحة الاسم في مدخل Microsoft Azure.
  • ضمن Configuration، قم بتغيير قيمة الحد الأقصى لجلسات عمل العميل لكل اسم مصادقة إلى العدد المطلوب من الجلسات لكل عميل.
  • حدد تطبيق.

إشعار

لتكوين Azure CLI، قم بتحديث الخاصية MaxClientSessionsPerAuthenticationName في حمولة مساحة الاسم بالقيمة المطلوبة.

تدفق الاتصال:

يجب أن تتضمن حزم CONNECT لكل جلسة الخصائص التالية:

  • قم بتوفير خاصية Username في حزمة CONNECT للدلالة على اسم مصادقة العميل.
  • قم بتوفير الخاصية ClientID في حزمة CONNECT للدلالة على اسم جلسة العمل مثل وجود قيمة واحدة أو أكثر لمعرف العميل لكل اسم مستخدم.

على سبيل المثال، تمكن المجموعات التالية من Username و ClientIds في حزمة CONNECT العميل "Mgmt-application" من الاتصال بوسيط MQTT خلال ثلاث جلسات مستقلة:

  • الجلسة الأولى:
    • المستخدم: Mgmt-application
    • معرف العميل: Mgmt-Session1
  • الجلسة الثانية:
    • المستخدم: Mgmt-application
    • معرف العميل: Mgmt-Session2
  • الجلسة الثالثة:
    • المستخدم: Mgmt-application
    • معرف العميل: Mgmt-Session3

رسم تخطيطي لمثال متعدد الجلسات.

لمزيد من المعلومات، راجع كيفية إنشاء جلسات متعددة لعميل واحد.

معالجة الجلسات:

  • إذا حاول عميل تولي جلسة عمل نشطة لعميل آخر عن طريق تقديم اسم جلسة العمل الخاصة به باسم مصادقة مختلف، يتم رفض طلب الاتصال الخاص به بخطأ غير مصرح به. على سبيل المثال، إذا حاول العميل B الاتصال بجلسة العمل 123 التي تم تعيينها في ذلك الوقت للعميل A، يتم رفض طلب اتصال العميل B. ومع ذلك، إذا حاول نفس العميل إعادة الاتصال بنفس أسماء الجلسة واسم المصادقة نفسه، فإنه قادر على تولي جلسته الحالية.
  • إذا تم حذف مورد عميل دون إنهاء جلسة العمل الخاصة به، فلن يتمكن العملاء الآخرون من استخدام اسم جلسة العمل الخاصة به حتى تنتهي جلسة العمل. على سبيل المثال، إذا أنشأ العميل B جلسة عمل باسم جلسة العمل 123 ثم يتم حذف العميل B، فلن يتمكن العميل A من الاتصال بجلسة العمل 123 حتى تنتهي صلاحيتها.
  • ينطبق حد عدد جلسات العمل لكل عميل على الجلسات عبر الإنترنت وغير المتصلة في أي وقت. على سبيل المثال، ضع في اعتبارك مساحة اسم مع تعيين الحد الأقصى لجلسات عمل العميل لكل اسم مصادقة إلى 1. إذا كان العميل A يتصل بجلسة عمل ثابتة 123، ثم تم قطع الاتصال، فلن يتمكن العميل A من الاتصال بجلسة عمل جديدة 456 نظرا لأن جلسته 123 لا تزال نشطة حتى إذا كانت غير متصلة. وفقا لذلك، نوصي بأن يعيد نفس العميل دائما الاتصال بنفس أسماء الجلسات الثابتة بدلا من إنشاء اسم جلسة عمل جديد مع كل إعادة اتصال.

ميزات MQTT

تدعم ميزة وسيط MQTT في Azure Event Grid ميزات MQTT التالية:

جودة الخدمة (QoS)

يدعم وسيط MQTT QoS 0 و1، والتي تحدد ضمان تسليم الرسائل على حزم PUBLISH و SUBSCRIBE بين العملاء ووسيط MQTT. يضمن QoS 0 التسليم مرة واحدة على الأكثر؛ لا يتم التعرف على الرسائل التي تحتوي على QoS 0 من قبل المشترك ولا تتم إعادة إرسالها من قبل الناشر. يضمن QoS 1 التسليم مرة واحدة على الأقل؛ يتم التعرف على الرسائل من قبل المشترك ويتم إعادة إرسالها من قبل الناشر إذا لم يتم التعرف عليها. تمكن QoS عملائك من التحكم في كفاءة الاتصال وموثوقيته.

جلسات العمل المستمرة

يدعم وسيط MQTT جلسات عمل مستمرة ل MQTT v3.1.1 بحيث يحتفظ وسيط MQTT بمعلومات حول جلسة العميل في حالة قطع الاتصال لضمان موثوقية الاتصال. تتضمن هذه المعلومات اشتراكات العميل ورسائل QoS 1 الفائتة/ غير المعترف بها. يمكن للعملاء تكوين جلسة عمل مستمرة من خلال تعيين علامة cleanSession في حزمة CONNECT إلى false.

بدء التنظيف وانتهاء جلسة العمل

قدم MQTT v5 ميزات البداية النظيفة وانتهاء صلاحية الجلسة كتحسن على MQTT v3.1.1 في معالجة استمرار الجلسة. Clean Start هي ميزة تسمح للعميل ببدء جلسة عمل جديدة مع وسيط MQTT، مع تجاهل أي بيانات جلسة عمل سابقة. تسمح مدة صلاحية الجلسة للعميل بإبلاغ وسيط MQTT عند اعتبار جلسة غير نشطة منتهية الصلاحية وإزالتها تلقائيا. في حزمة CONNECT، يمكن للعميل تعيين علامة البدء النظيف إلى فاصل زمني صحيح و/أو قصير لانتهاء صلاحية جلسة العمل لأسباب أمنية أو لتجنب أي تعارضات محتملة في البيانات قد تكون حدثت أثناء جلسة العمل السابقة. يمكن للعميل أيضا تعيين بداية نظيفة إلى الفاصل الزمني لانتهاء صلاحية الجلسة الخاطئة و/أو الطويلة لضمان موثوقية جلسات العمل المستمرة وكفاءتها.

الحد الأقصى لتكوين الفاصل الزمني لانتهاء صلاحية الجلسة

يمكنك تكوين الحد الأقصى للفاصل الزمني لانتهاء صلاحية الجلسة المسموح به لجميع العملاء المتصلين بمساحة اسم شبكة الأحداث. بالنسبة لعملاء MQTT v3.1.1، يتم تطبيق الحد المكون كفاصل زمني افتراضي لانتهاء صلاحية الجلسة لجميع الجلسات الثابتة. بالنسبة لعملاء MQTT v5، يتم تطبيق الحد المكون كقيمة قصوى للخاصية Session Expiry Interval في حزمة CONNECT؛ يتم ضبط أي قيمة تتجاوز الحد. القيمة الافتراضية لخاصية مساحة الاسم هذه هي ساعة واحدة ويمكن تمديدها حتى 8 ساعات. استخدم الخطوات التالية لتكوين الحد الأقصى لانتهاء صلاحية الجلسة في مدخل Microsoft Azure:

  • انتقل إلى مساحة الاسم في مدخل Microsoft Azure.
  • ضمن Configuration، قم بتغيير قيمة الحد الأقصى لانتهاء صلاحية جلسة العمل بالساعات إلى الحد المطلوب.
  • حدد تطبيق.

لقطة شاشة لأقصى تكوين للفاصل الزمني لانتهاء جلسة العمل.

تجاوز جلسة العمل

يحتفظ وسيط MQTT بقائمة انتظار من الرسائل لكل جلسة MQTT نشطة غير متصلة، حتى يتصل العميل مع وسيط MQTT مرة أخرى لتلقي الرسائل في قائمة الانتظار. إذا لم يتصل العميل لتلقي رسائل QOS1 في قائمة الانتظار، تبدأ قائمة انتظار الجلسة في تجميع الرسائل حتى تصل إلى حدها الأقصى: 100 رسالة أو 1 ميغابايت. بمجرد أن تصل قائمة الانتظار إلى حدها خلال عمر جلسة العمل، يتم إنهاء الجلسة.

رسائل الإرادة والعهد الأخير (LWT)

تقوم آخر وصية وعهد (LWT) بإعلام عملاء MQTT بقطع الاتصال المفاجئ لعملاء MQTT الآخرين. يمكنك استخدام LWT لضمان تدفق اتصال يمكن التنبؤ به وموثوق به بين عملاء MQTT أثناء عمليات قطع الاتصال غير المتوقعة، وهو أمر مهم للسيناريوهات التي يكون فيها الاتصال في الوقت الحقيقي وموثوقية النظام والإجراءات المنسقة أمرا بالغ الأهمية. يمكن للعملاء الذين يتعاونون لتنفيذ مهام معقدة التفاعل مع رسائل LWT من بعضهم البعض عن طريق ضبط سلوكهم أو إعادة توزيع المهام أو تولي مسؤوليات معينة للحفاظ على أداء النظام واستقراره. لاستخدام LWT، يمكن للعميل تحديد رسالة will، وموضوع will، وبقية خصائص الإرادة في حزمة CONNECT أثناء الاتصال. عندما يقطع العميل الاتصال فجأة، ينشر وسيط MQTT رسالة الرسائل إلى جميع العملاء الذين اشتركوا في موضوع الإرادة. لتقليل الضوضاء الناتجة عن حالات قطع الاتصال المتقلبة، يمكن للعميل تعيين الفاصل الزمني للتأخير إلى قيمة أكبر من الصفر. في هذه الحالة، إذا قطع العميل الاتصال فجأة ولكنه أعاد تعيين الاتصال قبل انتهاء صلاحية الفاصل الزمني للتأخير، فلن يتم نشر رسالة will.

خصائص المستخدم

يدعم وسيط MQTT خصائص المستخدم على حزم MQTT v5 PUBLISH التي تسمح لك بإضافة أزواج قيمة مفتاح مخصصة في رأس الرسالة لتوفير المزيد من السياق حول الرسالة. حالات الاستخدام لخصائص المستخدم متعددة الاستخدامات. يمكنك استخدام هذه الميزة لتضمين الغرض من الرسالة أو أصلها حتى يتمكن المتلقي من معالجة الرسالة دون تحليل الحمولة، وحفظ موارد الحوسبة. على سبيل المثال، قد تؤدي الرسالة التي تحتوي على خاصية مستخدم تشير إلى الغرض منها ك "تحذير" إلى تشغيل منطق معالجة مختلف عن منطق واحد لغرض "المعلومات".

نمط الطلب-الاستجابة

قدم MQTTv5 حقولا في عنوان حزمة MQTT PUBLISH التي توفر سياقا لرسالة الاستجابة في نمط استجابة الطلب. تتضمن هذه الحقول موضوع استجابة ومعرف ارتباط يمكن للمستجيب استخدامه في الاستجابة دون تكوين مسبق. تتيح معلومات الاستجابة اتصالا أكثر كفاءة لنمط استجابة الطلب القياسي المستخدم في سيناريوهات الأوامر والتحكم.

رسم تخطيطي لمثال نمط الطلب والاستجابة.

الفاصل الزمني لانتهاء صلاحية الرسالة:

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

الأسماء المستعارة للمواضيع:

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

رسم تخطيطي لمثال الاسم المستعار للموضوع.

التحكم بالتدفق

في MQTT v5، يشير التحكم في التدفق إلى آلية إدارة معدل وحجم الرسائل التي يمكن للعميل التعامل معها. يمكن تكوين التحكم في التدفق عن طريق تعيين الحد الأقصى لحجم الحزمة وتلقي المعلمات القصوى في حزمة CONNECT. تسمح المعلمة تلقي الحد الأقصى للعميل بتحديد عدد الرسائل المرسلة من قبل الوسيط إلى عدد الرسائل التي يمكن للعميل التعامل معها. تحدد المعلمة Maximum Packet Size الحد الأقصى لحجم الحزم التي يمكن للعميل تلقيها. وسيط MQTT لديه حد لحجم الرسالة يبلغ 512 كيبيبايت. تضمن هذه الميزة موثوقية الاتصال واستقراره للأجهزة المقيدة ذات سرعة معالجة محدودة أو قدرات تخزين محدودة.

الإقرارات السالبة وحزمة قطع الاتصال التي بدأها الخادم

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

القيود الحالية

يضيف وسيط MQTT المزيد من ميزات MQTT v5 وMQTT v3.1.1 في المستقبل لمحاذاة المزيد مع مواصفات MQTT. توضح القائمة التالية بالتفصيل الاختلافات الحالية بين الميزات التي يدعمها وسيط MQTT ومواصفات MQTT:

القيود الحالية ل MQTTv5

يختلف MQTT v5 حاليا عن MQTT v5 Specification بالطرق التالية:

  • الاشتراكات المشتركة غير مدعومة حتى الآن.
  • الاحتفاظ بالعلامة غير مدعوم حتى الآن.
  • الحد الأقصى للفاصل الزمني للتأخير هو 300.
  • الحد الأقصى ل QoS هو 1.
  • الحد الأقصى لحجم الحزمة هو 512 كيبيبايت
  • طلب الرسائل غير مضمون.
  • معرفات الاشتراك غير مدعومة.
  • معرفات العميل المعينة غير مدعومة حتى الآن.
  • الحد الأقصى للاسم المستعار للموضوع هو 10. لا يعين الخادم أي أسماء مستعارة للموضوع للرسائل الصادرة في الوقت الحالي. يمكن للعملاء تعيين أسماء مستعارة للموضوع واستخدامها ضمن حد معين.
  • لا ترجع CONNACK خاصية Response Information حتى إذا كان طلب CONNECT يحتوي على خاصية Request Response Information.
  • لا تستخدم الخدمة خصائص المستخدم على حزم CONNECT و SUBSCRIBE و DISCONNECT و PUBACK و AUTH لذلك فهي غير مدعومة. إذا تضمن أي من هذه الطلبات خصائص المستخدم، يفشل الطلب.
  • إذا تلقى الخادم PUBACK من عميل برمز استجابة غير ناجح، يتم إنهاء الاتصال.
  • الحد الأقصى للإبقاء على قيد الحياة هو 1160 ثانية.

القيود الحالية ل MQTTv3.1.1

يختلف MQTT v5 حاليا عن MQTT v3.1.1 Specification بالطرق التالية:

  • QoS2 و Retain Flag غير مدعومين حتى الآن. يفشل طلب النشر مع علامة الاحتفاظ أو مع QoS2 ويغلق الاتصال.
  • طلب الرسائل غير مضمون.
  • الحد الأقصى للإبقاء على قيد الحياة هو 1160 ثانية.

نماذج التعليمة البرمجية:

يحتوي هذا المستودع على نماذج التعليمات البرمجية C# وC وpython التي توضح كيفية إرسال بيانات تتبع الاستخدام وإرسال الأوامر وتنبيهات البث. الشهادات التي تم إنشاؤها من خلال العينات مناسبة للاختبار، ولكنها غير مناسبة لبيئات الإنتاج.

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

تعرف على المزيد حول MQTT:

تعرف على المزيد حول وسيط MQTT: