التواصل مع DPS باستخدام بروتوكول MQTT

تمكن خدمة توفير أجهزة Azure IoT (DPS) الأجهزة من الاتصال بنقطة نهاية جهاز DPS باستخدام:

DPS ليس وسيط MQTT كامل الميزات ولا يدعم جميع السلوكيات المحددة في معيار MQTT v3.1.1. توضح هذه المقالة كيف يمكن للأجهزة استخدام سلوكيات MQTT المدعومة للتواصل مع DPS.

يجب تأمين جميع اتصالات الجهاز مع DPS باستخدام TLS/SSL. لذلك، لا يدعم DPS الاتصالات غير الآمنة عبر المنفذ 1883.

إشعار

لا يدعم DPS حاليا الأجهزة التي تستخدم آلية إثبات TPM عبر بروتوكول MQTT.

الاتصال إلى DPS

يمكن للجهاز استخدام بروتوكول MQTT للاتصال بمثيل DPS باستخدام أي من الخيارات التالية.

استخدام بروتوكول MQTT مباشرة (كجهاز)

إذا تعذر على الجهاز استخدام SDKs للجهاز، فلا يزال بإمكانه الاتصال بنقاط نهاية الجهاز العام باستخدام بروتوكول MQTT على المنفذ 8883. في حزمة CONNECT، يجب أن يستخدم الجهاز القيم التالية:

  • بالنسبة لحقل ClientId ، استخدم registrationId.

  • بالنسبة لحقل اسم المستخدم ، استخدم {idScope}/registrations/{registration_id}/api-version=2019-03-31، حيث {idScope} هو نطاق معرف DPS وهو {registration_id} معرف التسجيل لجهازك.

    إشعار

    إذا كنت تستخدم مصادقة شهادة X.509، يتم توفير معرف التسجيل بواسطة الاسم الشائع للموضوع (CN) لشهادة طرفية لجهازك (الكيان النهائي). {registration_id}في حقل اسم المستخدم يجب أن يتطابق مع الاسم الشائع.

  • بالنسبة إلى حقل كلمة المرور، استخدم رمز SAS المميز. تنسيق رمز SAS المميز هو نفسه لكل بروتوكولات HTTPS وAMQP:

    SharedAccessSignature sr={URL-encoded-resourceURI}&sig={signature-string}&se={expiry}&skn=registration يجب أن يكون resourceURI بالتنسيق {idScope}/registrations/{registration_id}. يجب تعيين اسم النهج (skn) إلى registration.

    إشعار

    إذا كنت تستخدم مصادقة شهادة X.509، فلن تكون كلمات مرور رمز SAS المميز مطلوبة.

    لمزيد من المعلومات حول كيفية إنشاء رموز SAS المميزة، راجع قسم رموز الأمان المميزة في التحكم في الوصول إلى DPS.

تحتوي القائمة التالية على سلوكيات خاصة بتنفيذ DPS:

  • لا يدعم DPS جلسات العمل المستمرة. يعامل كل جلسة على أنها غير مستمرة، بغض النظر عن قيمة علامة CleanSession . نوصي بتعيين CleanSession إلى true.

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

تكوين TLS/SSL

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

تسجيل جهاز

لتسجيل جهاز من خلال DPS، يجب أن يشترك الجهاز باستخدام $dps/registrations/res/# عامل تصفية الموضوع. يتم استخدام حرف البدل # متعدد المستويات في عامل تصفية الموضوع فقط للسماح للجهاز بتلقي المزيد من الخصائص في اسم الموضوع. لا تسمح DPS باستخدام أو # ? أحرف البدل لتصفية المواضيع الفرعية. نظرا لأن DPS ليس وسيط مراسلة فرعية للأغراض العامة، فإنه يدعم فقط أسماء الموضوعات الموثقة وعوامل تصفية المواضيع.

يجب أن ينشر الجهاز رسالة تسجيل إلى DPS باستخدام $dps/registrations/PUT/iotdps-register/?$rid={request_id} كاسم موضوع. يجب أن تحتوي الحمولة على كائن تسجيل الجهاز بتنسيق JSON. في سيناريو ناجح، يتلقى الجهاز استجابة حول $dps/registrations/res/202/?$rid={request_id}&retry-after=x اسم الموضوع حيث x هي قيمة إعادة المحاولة بعد بالثوان.

التحقق من حالة عملية التسجيل

يجب أن يستطلع الجهاز الخدمة بشكل دوري لتلقي نتيجة عملية تسجيل الجهاز. بافتراض أن الجهاز قد اشترك بالفعل في $dps/registrations/res/# الموضوع، يمكنه نشر رسالة حالة عملية الحصول على اسم $dps/registrations/GET/iotdps-get-operationstatus/?$rid={request_id}&operationId={operationId} الموضوع. يجب أن يكون معرف العملية في هذه الرسالة هو القيمة المستلمة في رسالة استجابة RegistrationOperationStatus في الخطوة السابقة. في الحالة الناجحة، تستجيب الخدمة للموضوع $dps/registrations/res/200/?$rid={request_id} . تحتوي حمولة الاستجابة على كائن RegistrationOperationStatus. يجب أن يستمر الجهاز في التحقق من الخدمة إذا كان رمز الاستجابة هو 202 بعد تأخير يساوي فترة إعادة المحاولة بعد. عملية تسجيل الجهاز ناجحة إذا كانت الخدمة ترجع رمز حالة 200.

الاتصال عبر Websocket

عند الاتصال عبر Websocket، حدد البروتوكول الفرعي ك mqtt. اتبع RFC 6455.

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

لمعرفة المزيد حول بروتوكول MQTT، راجع وثائق MQTT.

لاستعراض نموذج التعليمات البرمجية MQTT، راجع نماذج تطبيق MQTT.

لمزيد من استكشاف قدرات DPS، راجع: