إرسال رسائل سحابية إلى جهاز من مركز إنترنت الأشياء
لإرسال إشعارات أحادية الاتجاه إلى تطبيق جهاز من الواجهة الخلفية للحل، أرسل رسائل سحابية إلى جهاز من مركز إنترنت الأشياء إلى جهازك. لمناقشة خيارات السحابة إلى الجهاز الأخرى التي يدعمها Azure IoT Hub، راجع إرشادات الاتصالات من السحابة إلى الجهاز.
ملاحظة
تتوفر الميزات الموضحة في هذه المقالة فقط في الطبقة القياسية من IoT Hub. لمزيد من المعلومات حول طبقات IoT Hub الأساسية والقياسية/المجانية، راجع اختيار طبقة IoT Hub المناسبة.
يمكنك إرسال رسائل سحابية إلى جهاز من خلال نقطة نهاية تواجه الخدمة، /الرسائل/الأجهزة. ثم يتلقى الجهاز الرسائل من خلال نقطة نهاية خاصة بالجهاز، / devices/{deviceId}/messages/devicebound.
لاستهداف كل رسالة من السحابة إلى الجهاز على جهاز واحد، يقوم مركز إنترنت الأشياء بتعيين الخاصية إلى / devices/{deviceId}/messages/devicebound.
تحتوي كل قائمة انتظار جهاز، على الأكثر، على 50 رسالة سحابية إلى جهاز. لمحاولة إرسال المزيد من الرسائل إلى نفس الجهاز يؤدي إلى حدوث خطأ.
دورة حياة الرسائل من السحابة إلى الجهاز
لضمان تسليم الرسائل مرة واحدة على الأقل، يستمر مركز إنترنت الأشياء في إرسال الرسائل من السحابة إلى الجهاز في قوائم انتظار كل جهاز. لكي يتمكن مركز إنترنت الأشياء من إزالة الرسائل من قائمة الانتظار، يجب أن تقر الأجهزة صراحة بالاكتمال. يضمن هذا النهج المرونة ضد الاتصال وفشل الجهاز.
يتم عرض الرسم البياني لحالة دورة الحياة في الرسم التخطيطي التالي:

عندما ترسل خدمة مركز إنترنت الأشياء رسالة إلى جهاز، تقوم الخدمة بتعيين حالة الرسالة إلى قائمة انتظار. عندما يريد جهاز تلقي رسالة، يقوم مركز إنترنت الأشياء بتأمين الرسالة عن طريق تعيين الحالة إلى غير مرئية. تسمح هذه الحالة لسلاسل الرسائل الأخرى على الجهاز ببدء تلقي رسائل أخرى. عندما يكمل مؤشر ترابط جهاز معالجة رسالة، فإنه يقوم بإعلام مركز إنترنت الأشياء عن طريق إكمال الرسالة. ثم يقوم مركز إنترنت الأشياء بتعيين الحالة إلى مكتمل.
يمكن للجهاز أيضا:
رفض الرسالة، مما يؤدي إلى قيام مركز إنترنت الأشياء بتعيينها إلى حالة الأحرف الميتة . لا يمكن للأجهزة التي تتصل عبر بروتوكول نقل القياس عن بعد في وضع الرسائل في قائمة الانتظار (MQTT) رفض الرسائل من مجموعة النظراء إلى الجهاز.
التخلي عن الرسالة، مما يؤدي إلى قيام مركز إنترنت الأشياء بإعادة الرسالة إلى قائمة الانتظار، مع تعيين الحالة إلى قائمة انتظار. لا يمكن للأجهزة التي تتصل عبر بروتوكول MQTT التخلي عن الرسائل من السحابة إلى الجهاز.
قد تفشل سلسلة الرسائل في معالجة رسالة دون إعلام مركز إنترنت الأشياء. في هذه الحالة، تنتقل الرسائل تلقائيا من الحالة غير المرئية مرة أخرى إلى الحالة في قائمة الانتظار بعد انتهاء مهلة الرؤية (أو مهلة القفل ). قيمة هذه المهلة هي دقيقة واحدة ولا يمكن تغييرها.
تحدد الخاصية الحد الأقصى لعدد التسليم على مركز إنترنت الأشياء الحد الأقصى لعدد المرات التي يمكن أن تنتقل فيها الرسالة بين الحالتين Enqueued و Invisible . بعد هذا العدد من الانتقالات، يقوم مركز إنترنت الأشياء بتعيين حالة الرسالة إلى حرف ميت. وبالمثل ، يقوم مركز إنترنت الأشياء بتعيين حالة الرسالة إلى Dead Lettered بعد وقت انتهاء صلاحيتها. لمزيد من المعلومات، راجع وقت العيش.
توضح لك مقالة كيفية إرسال رسائل سحابية إلى جهاز باستخدام IoT Hub كيفية إرسال رسائل سحابية إلى جهاز من السحابة وتلقيها على جهاز.
عادة ما يكمل الجهاز رسالة سحابية إلى جهاز عندما لا يؤثر فقدان الرسالة على منطق التطبيق. مثال على ذلك قد يكون عندما يستمر الجهاز في محتوى الرسالة محليا أو ينفذ عملية بنجاح. يمكن أن تحمل الرسالة أيضا معلومات عابرة ، لن يؤثر فقدانها على وظائف التطبيق. في بعض الأحيان، بالنسبة للمهام طويلة الأمد، يمكنك:
أكمل رسالة السحابة إلى الجهاز بعد استمرار وصف المهمة في وحدة التخزين المحلية للجهاز.
قم بإخطار النهاية الخلفية للحل برسالة واحدة أو أكثر من الجهاز إلى السحابة في مراحل مختلفة من تقدم المهمة.
انتهاء صلاحية الرسالة (وقت العيش)
كل رسالة سحابية إلى جهاز لها وقت انتهاء صلاحية. يتم تعيين هذه المرة بواسطة أي مما يلي:
- خاصية ExpiryTimeUtc في الخدمة
- مركز إنترنت الأشياء، باستخدام الوقت الافتراضي للعيش المحدد كخاصية مركز إنترنت الأشياء
راجع خيارات تكوين السحابة إلى الجهاز.
تتمثل إحدى الطرق الشائعة للاستفادة من انتهاء صلاحية الرسالة وتجنب إرسال الرسائل إلى الأجهزة غير المتصلة في تعيين وقت قصير للقيم الحية . يحقق هذا النهج نفس النتيجة مثل الحفاظ على حالة اتصال الجهاز ، ولكنه أكثر كفاءة. عندما تطلب إقرارات بالرسائل، يقوم مركز إنترنت الأشياء بإعلامك بالأجهزة التالية:
- قادرة على تلقي الرسائل.
- ليست متصلة بالإنترنت أو فشلت.
ملاحظات الرسالة
عند إرسال رسالة سحابية إلى جهاز، يمكن للخدمة طلب تسليم ملاحظات لكل رسالة حول الحالة النهائية لتلك الرسالة. يمكنك القيام بذلك عن طريق تعيين خاصية تطبيق iothub-ack في رسالة مجموعة النظراء إلى الجهاز التي يتم إرسالها إلى إحدى القيم الأربع التالية:
| قيمة عقار Ack | السلوك |
|---|---|
| بلا | لا يقوم مركز إنترنت الأشياء بإنشاء رسالة ملاحظات (السلوك الافتراضي). |
| إيجابي | إذا وصلت رسالة السحابة إلى الجهاز إلى الحالة مكتملة ، يقوم مركز إنترنت الأشياء بإنشاء رسالة ملاحظات. |
| سلبي | إذا وصلت رسالة السحابة إلى الجهاز إلى حالة الأحرف الميتة ، يقوم مركز إنترنت الأشياء بإنشاء رسالة ملاحظات. |
| كامل | يقوم مركز إنترنت الأشياء بإنشاء رسالة ملاحظات في كلتا الحالتين. |
إذا كانت قيمة Ackممتلئة، ولم تتلق رسالة ملاحظات، فهذا يعني أن رسالة الملاحظات قد انتهت صلاحيتها. يتعذر على الخدمة معرفة ما حدث للرسالة الأصلية. في الممارسة العملية ، يجب أن تضمن الخدمة أنها تستطيع معالجة التعليقات قبل انتهاء صلاحيتها. الحد الأقصى لوقت انتهاء الصلاحية هو يومان ، مما يترك الوقت لتشغيل الخدمة مرة أخرى في حالة حدوث فشل.
كما هو موضح في نقاط النهاية، يقدم مركز إنترنت الأشياء ملاحظات من خلال نقطة نهاية تواجه الخدمة، /messages/ servicebound/feedback، كرسائل. دلالات تلقي الملاحظات هي نفسها بالنسبة للرسائل من السحابة إلى الجهاز. كلما كان ذلك ممكنا، يتم تجميع ملاحظات الرسالة في رسالة واحدة، بالتنسيق التالي:
| الخاصية | الوصف |
|---|---|
| وقت الانتظار | طابع زمني يشير إلى وقت استلام المحور لرسالة الملاحظات |
| معرّف المستخدم | {iot hub name} |
| نوع المحتوى | application/vnd.microsoft.iothub.feedback.json |
سيرسل النظام الملاحظات إما عندما تصل الدفعة إلى 64 رسالة ، أو في غضون 15 ثانية من آخر إرسال ، أيهما يأتي أولا.
النص الأساسي عبارة عن مجموعة من السجلات المسلسلة بواسطة JSON، لكل منها الخصائص التالية:
| الخاصية | الوصف |
|---|---|
| enqueuedTimeUtc | طابع زمني يشير إلى وقت حدوث نتيجة الرسالة (على سبيل المثال، تلقى المركز رسالة الملاحظات أو انتهت صلاحية الرسالة الأصلية) |
| الأصلمعرف الرسالة | معرف الرسالة الخاص برسالة السحابة إلى الجهاز التي تتعلق بها معلومات الملاحظات هذه |
| statusCode | سلسلة مطلوبة، تستخدم في رسائل الملاحظات التي يتم إنشاؤها بواسطة مركز إنترنت الأشياء: نجاح انتهت الصلاحية التسليمالعدتجاوز مرفوض وغير موافق عليه ازاله |
| الوصف | قيم السلسلة ل StatusCode |
| معرف الجهاز | DeviceId للجهاز المستهدف لرسالة السحابة إلى الجهاز التي تتعلق بها هذه الحزمة من الملاحظات |
| deviceGenerationId | DeviceGenerationId للجهاز المستهدف لرسالة السحابة إلى الجهاز التي تتعلق بها هذه الحزمة من الملاحظات |
لكي تقوم رسالة السحابة إلى الجهاز بربط ملاحظاتها بالرسالة الأصلية، يجب أن تحدد الخدمة معرف رسالة.
يتم عرض النص الأساسي لرسالة ملاحظات في التعليمة البرمجية التالية:
[
{
"originalMessageId": "0987654321",
"enqueuedTimeUtc": "2015-07-28T16:24:48.789Z",
"statusCode": "Success",
"description": "Success",
"deviceId": "123",
"deviceGenerationId": "abcdefghijklmnopqrstuvwxyz"
},
{
...
},
...
]
ملاحظات معلقة للأجهزة المحذوفة
عند حذف جهاز، يتم حذف أي ملاحظات معلقة أيضا. يتم إرسال ملاحظات الجهاز على دفعات. إذا تم حذف جهاز في النافذة الضيقة (غالبا أقل من 1 ثانية) بين الوقت الذي يؤكد فيه الجهاز استلام الرسالة وعند إعداد دفعة الملاحظات التالية، فلن تحدث الملاحظات.
يمكنك معالجة هذا السلوك عن طريق الانتظار لفترة من الوقت حتى تصل الملاحظات المعلقة قبل حذف جهازك. يجب افتراض فقدان ملاحظات الرسائل ذات الصلة بمجرد حذف الجهاز.
خيارات تكوين السحابة إلى الجهاز
يعرض كل مركز إنترنت الأشياء خيارات التكوين التالية للمراسلة من السحابة إلى الجهاز:
| الخاصية | الوصف | النطاق والافتراضي |
|---|---|---|
| defaultTtlAsIso8601 | TTL الافتراضي للرسائل من السحابة إلى الجهاز | ISO_8601 فاصل زمني يصل إلى 2 أيام (الحد الأدنى 1 دقيقة) ؛ الافتراضي: 1 ساعة |
| maxDeliveryCount | الحد الأقصى لعدد التسليم لقوائم انتظار السحابة إلى الجهاز لكل جهاز | 1 إلى 100 ؛ الافتراضي: 10 |
| feedback.ttlAsIso8601 | الاحتفاظ برسائل الملاحظات المرتبطة بالخدمة | ISO_8601 فاصل زمني يصل إلى 2 أيام (الحد الأدنى 1 دقيقة) ؛ الافتراضي: 1 ساعة |
| feedback.maxDeliveryCount | الحد الأقصى لعدد التسليم لقائمة انتظار الملاحظات | 1 إلى 100 ؛ الافتراضي: 10 |
| feedback.lockDurationAsIso8601 | مدة القفل لقائمة انتظار الملاحظات | ISO_8601 فاصل زمني من 5 إلى 300 ثانية (5 ثوان على الأقل) ؛ الافتراضي: 60 ثانية. |
يمكنك تعيين خيارات التكوين بإحدى الطرق التالية:
- مدخل Azure: ضمن إعدادات Hub على موزع إنترنت الأشياء، حدد نقاط النهاية المضمنة وانتقل إلى المراسلة من السحابة إلى الجهاز. (تعيين خصائص feedback.maxDeliveryCountوfeedback.lockDurationAsIso8601 غير معتمد حاليا في مدخل Azure.)
Azure CLI: استخدم الأمر az iot hub update :
az iot hub update --name {your IoT hub name} \ --set properties.cloudToDevice.defaultTtlAsIso8601=PT1H0M0S az iot hub update --name {your IoT hub name} \ --set properties.cloudToDevice.maxDeliveryCount=10 az iot hub update --name {your IoT hub name} \ --set properties.cloudToDevice.feedback.ttlAsIso8601=PT1H0M0S az iot hub update --name {your IoT hub name} \ --set properties.cloudToDevice.feedback.maxDeliveryCount=10 az iot hub update --name {your IoT hub name} \ --set properties.cloudToDevice.feedback.lockDurationAsIso8601=PT0H1M0S
الخطوات التالية
للحصول على معلومات حول مجموعات تطوير البرامج (SDK) التي يمكنك استخدامها لتلقي رسائل من السحابة إلى الجهاز، راجع Azure IoT SDKs.
لتجربة تلقي رسائل من السحابة إلى الجهاز، راجع البرنامج التعليمي إرسال السحابة إلى الجهاز .