مشغِّل قائمة الانتظار
قائمة انتظار الرسائل هي مكون برنامج يُستخدم لمعالجة المراسلة بين العمليات أو مؤشرات الترابط أو التطبيقات. يمكن لقائمة الانتظار تخزين رسالة، ويمكن للعمال إحضار الرسالة عند الحاجة.
في السحابة، يمكن لقوائم انتظار الرسائل إنشاء أحداث بحمولة. يمكن لخدمة مثل Azure Functions الإنصات لمثل هذه الرسالة وتشغيل تعليمتها البرمجية عند نشر رسالة.
استخدام قوائم انتظار الرسائل
لكي تتمكن وظيفة Azure من استهلاك رسالة من قائمة انتظار الرسائل، تحتاج إلى مشغِّل وربما ربط بيانات.
يتعين على وظيفة Azure الإنصات لقائمة انتظار معينة بحيث يتم تشغيل تعليمتها البرمجية عند نشر رسالة جديدة في قائمة الانتظار هذه. لإعداد مشغِّل، يتعين عليك توفير بيانات الاعتماد المناسبة حتى تعرف التعليمة البرمجية للمشغِّل كيفية الاتصال بقائمة انتظار الرسائل. أنشئ إدخالاً في ملف function.json للوظيفة التي تنصت لقائمة الانتظار. في عنصر bindings
، حدد هذه الخصائص في أحد الإدخالات:
الخاصية | القيمة |
---|---|
name |
اسم يمكنك الرجوع إليه في التعليمة البرمجية |
type |
queueTrigger |
direction |
in |
queueName |
ما يُطلق على قائمة الانتظار |
connection |
متغير تكوين في local.settings.json |
يمكن تحديد مثال على الإدخال كما يلي:
{
"name": "myQueueItem",
"type": "queueTrigger",
"direction": "in",
"queueName": "messages-incoming",
"connection": "AzureWebJobsStorage"
}
إذا كانت قائمة الانتظار هذه تعمل على حساب تخزين، تكون قيمة AzureWebJobsStorage
هي قيمة سلسلة الاتصال.
لا تحتاج بشكل صارم إلى ربط بيانات عند استهلاك رسالة من قائمة انتظار. ومع ذلك، إذا كنت تريد الكتابة في قائمة انتظار، تحتاج إلى ربط بيانات مخرجات. من خلال ربط البيانات هذا، يمكنك الحصول على مرجع إلى قائمة الانتظار المقصودة.
إشعار
حالياً، يتم اعتماد عمليات ربط بيانات المخرجات فقط لقوائم الانتظار.
التطوير محلياً
بصفتك مطوراً، تحتاج إلى دورات قصيرة من الملاحظات. كما تحتاج إلى التأكد من أن تجربة المطور لديك قريبة قدر الإمكان من بيئة الإنتاج. ثمة طريقة لتحقيق كلا هذين الهدفين؛ وهو استخدام محاكي قائمة انتظار.
يسمح لك محاكي قائمة الانتظار بمحاكاة رسائل قائمة الانتظار الحقيقية التي ستستجيب لها وظيفة Azure. لاستخدام المحاكي:
ثبِّت المحاكي. ابحث عن Azurite في تعليمة Visual Studio البرمجية أو نزِّل ملحق Azurite.
لاستخدام وظيفة المحاكي، ابدأ بتحديد Azure: Start Queue Service في لوحة الأوامر.
يؤدي تشغيل هذا الأمر إلى بدء تشغيل وحدة استماع تسمى Azure Storage Explorer ويمكن لتطبيق آخر استشعارها. Storage Explorer هو تطبيق عميل يتيح لك تصفح الموارد السحابية واستخدام وظيفة المحاكي.
تنزيل Azure Storage Explorer. ثم افتح التطبيق، وسترى الإشارة التالية بأن المحاكي يعمل:
إنشاء قائمة انتظار في المحاكي. ستستخدم قائمة الانتظار هذه كجزء من تكوين نقطة نهاية الوظيفة. بالنقر بزر الماوس الأيمن فوق عنصر قائمة الانتظار، يمكنك إنشاء قائمة انتظار جديدة.
للتأكد من أن تطبيق Functions يستخدم المحاكي، يجب تعيين سلسلة الاتصال بشكل صحيح. افتح local.settings.json، وحدد موقع عنصر
AzureWebJobsStorage
، وأعطه القيمة"UseDevelopmentStorage=true"
.إشعار
تذكر تعيين هذه الخاصية بشكل مختلف أثناء الانتقال إلى السحابة. يجب أن يشير إلى مورد فعلي على Azure عندما يكون في الإنتاج.
إنشاء الوظيفة
تم إعداد المحاكي المحلي الآن، ويحتوي على قائمة انتظار. لقد تمكنتَ أيضاً من تكوين المشروع للإشارة إلى المحاكي المحلي. يتعين عليك الآن إنشاء وظيفة لمعالجة مشغِّل قائمة انتظار.
إنشاء نقطة نهاية وظيفة
أنت جاهز الآن لإنشاء وظيفة يمكنها معالجة رسائل قوائم الانتظار الواردة. أنشئ مجلداً للوظيفة وأعطهِ اسماً، مثل queueTrigger
. ثم أنشئ ملف function.json وأعطه المحتوى التالي:
{
"bindings": [{
"name" "queueItem",
"type": "queueTrigger",
"direction": "in",
"queueName" : "items",
"connection": "AzureWebJobsStorage"
}]
}
قيمة عنصر name
مهمة لأنك سترجع إليها لاحقاً في التعليمة البرمجية لتحليل البيانات الواردة من قائمة الانتظار. يجب أن يكون من النوع queueTrigger
بحيث تشغِّلها قائمة الانتظار عندما تكون هناك رسالة جديدة.
يحدد عنصر queueName
بشكل فريد قائمة الانتظار التي تتفاعل أنت معها. مهما يكن ما تدخله هنا، فهو يجب أن يطابق ما تطلق عليه قائمة الانتظار في المحاكي أو ما تطلق عليه قائمة الانتظار الفعلية في Azure لاحقاً.
يشير عنصر connection
إلى قيمة عنصر AzureWebJobsStorage
في local.settings.json.
معالجة رسالة قائمة انتظار
لمعالجة رسالة قائمة انتظار واردة، يتعين عليك كتابة التعليمة البرمجية التي يمكنها تحليل الرسالة التي تحتاج إليها. يمكنك الآن تحديد الخطوات التالية التي ستتخذها. على سبيل المثال، قد تبدأ في طلب ويب أو تضع هذه الرسالة في قائمة انتظار أخرى أو ترسل الرسالة إلى قاعدة بيانات.
إعداد مسار
تحتاج إلى مسار لمعالجة الطلبات الواردة. سيعالج Azure Functions الطلبات إلى قائمة انتظار في الجذر. عند إعداد مسار كما يلي، سيتم استدعاء طلبك على أنه http://localhost:<port>/queueTrigger
:
http.HandleFunc("/queueTrigger", handleQueueTrigger)
فك ترميز طلب
عند إرسال رسالة قائمة الانتظار إليك، تتخذ هذا الشكل:
{
"Data": {
"queueItem": "your message"
},
"Metadata": {
"DequeueCount": 1,
"ExpirationTime": "2019-10-16T17:58:31+00:00",
"Id": "800ae4b3-bdd2-4c08-badd-f08e5a34b865",
"InsertionTime": "2019-10-09T17:58:31+00:00",
"NextVisibleTime": "2019-10-09T18:08:32+00:00",
"PopReceipt": "AgAAAAMAAAAAAAAAAgtnj8x+1QE=",
"sys": {
"MethodName": "QueueTrigger",
"UtcNow": "2019-10-09T17:58:32.2205399Z",
"RandGuid": "24ad4c06-24ad-4e5b-8294-3da9714877e9"
}
}
}
كجزء من فك ترميز هذا الطلب الوارد، تحتاج إلى بنية مساعد تعمل على نمذجة الرسالة السابقة. يجب أن يبدو مثل هذا:
type InvokeRequest {
Data map[string]json.RawMessage
Metadata map[string]interface{}
}
ابدأ كتابة التعليمة البرمجية لأخذ هذا الطلب الوارد وفك ترميزه:
func handleQueueTrigger(w http.ResponseWrite, r *http.Request) {
var invokeRequest InvokeRequest
d := json.NewDecoder(r.Body)
d.Decode(&invokeRequest)
}
لقد وصلتَ الآن إلى مرحلة فك ترميز الطلب، لكنك تحتاج إلى تحليل رسالة قائمة الانتظار نفسها.
تحليل رسالة قائمة انتظار
بعد فك ترميز الطلب، يمكن استرداد رسالة قائمة الانتظار من الطلب في خاصية Data
. يتعين عليك أيضاً الرجوع إلى الرسالة من خلال قيمة خاصية name
التي أعددتها في ملف function.json. تكون التعليمة البرمجية المستخدمة لاسترداد الرسالة سطراً واحداً كما يلي:
invokeRequest.Data["queueItem"]
نظرا لأنك تحتاج إلى القدرة على قراءة هذه الرسالة في نص واضح، ستستخدم مكتبة JSON وتحللها. ستستخدم مكتبة JSON أسلوب Unmarshal()
الذي يأخذ معلمتين: الرسالة المطلوب تحليلها والمتغير المطلوب وضع الرسالة التي تم تحليلها فيه. لذلك، يجب أن تبدو التعليمة البرمجية كما يلي:
var parsedMessage string
json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)
يحتوي parsedMessage
على رسالتك الآن. إذا كنت ترغب في طباعته إلى وحدة التحكم، استخدم التعليمة البرمجية التالية:
fmt.Println(parsedMessage) // your message
إشعار
إذا كانت رسالتك أكثر تقدماً من السلسلة، يجب أن يحتوي parsedMessage
على بنية تطابق شكل ما يشير إليه queueMessage
.
تشغيل رسالة
لاختبار تطبيقك، يمكنك استخدام Azure Storage Explorer. في الجزء الأيسر من الأداة، حدد الزر Add Message لإنشاء رسالة في قائمة الانتظار.
إذا كان لديك تطبيق Functions قيد التشغيل في هذا الوقت، فسيشغِّل ربط البيانات، وسيتم استدعاء التعليمة البرمجية لديك.