تمرين - معالجة رسالة قائمة انتظار
في هذا التمرين، ستتمكن من توسيع تطبيقك بمسار يمكنه تشغيل رسالة في قائمة انتظار الرسائل.
إشعار
قبل بدء هذا التمرين، تأكد من تنزيل ملحق Azurite وتنزيل Azure Storage Explorer وتنزيل Azure Functions Core Tools.
دعم التطبيق
في هذا التمرين، سنبدأ في تطبيق Azure Functions جديداً. أنشئ دليلاً جديداً وضع نفسك فيه.
حدد View>Command Palette.
اختر Azure Functions: Create New Project.
حدد مجلداً، وعادة ما يكون المجلد الحالي.
في Select a language، حدد Custom Handler.
في Select a template for your first function، حدد HttpTrigger.
أعطِ التطبيق اسماً، مثل queueTrigger.
حدد مستوى تخويل anonymous. يمكنك تغيير ذلك لاحقاً عند الحاجة.
في الجذر، أنشئ ملفاً يسمى server.go. يجب أن يحتوي المشروع الآن على الملفات التالية:
queueTrigger/ function.json .funcignore .gitignore host.json local.settings.json proxies.json server.goانتقل إلى ملف function.json في دليل
queueTrigger. ابحث عن إدخال ربط البيانات الأول في عنصرtype:{ "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" ] }غيَّر إدخال ربط البيانات هذا إلى هذا التكوين:
{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }في هذه الخطوة، يمكنك تعيين خاصية
name. سترجع إليها لاحقاً في التعليمة البرمجية. لقد غيَّرت نوع المشغِّل إلىqueueTrigger، مما يجعل الإنصات لرسائل قائمة الانتظار أمراً ممكناً.تشير قيمة
queueNameإلى قائمة انتظار معينة. عند تشغيل المحاكي لاحقاً، ستنشئ قائمة انتظار بهذا الاسم.وأخيراً، لقد أشرتَ إلى متغير في ملف local.settings.json الذي سيحتوي على سلسلة الاتصال بقائمة الانتظار.
إنشاء التطبيق
أصبح لديك الآن هيكل للتطبيق. أنت الآن جاهز لإضافة تعليمة برمجية يمكنها معالجة رسائل قائمة الانتظار الواردة.
افتح ملف server.go وأضف التعليمة البرمجية التالية:
package main import ( "encoding/json" "fmt" "log" "net/http" "os" ) func queueHandler(w http.ResponseWriter, r *http.Request) { } func main() { customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT") if !exists { customHandlerPort = "8080" } mux := http.NewServeMux() mux.HandleFunc("/queueTrigger", queueHandler) fmt.Println("Go server Listening on: ", customHandlerPort) log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) }لقد أعددتَ الآن مساراً في
/queueTrigger.ابحث عن قسم الاستيراد وأضف البُنى التالية ضمنه:
type InvokeRequest struct { Data map[string]json.RawMessage Metadata map[string]interface{} }ابحث عن أسلوب
queueHandler()وأضف تحديثاً له بالطريقة التالية:func queueHandler(w http.ResponseWriter, r *http.Request) { var invokeRequest InvokeRequest d := json.NewDecoder(r.Body) d.Decode(&invokeRequest) var parsedMessage string json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage) }تقرأ التعليمة البرمجية النص الأساسي أولاً من دفق الاستجابة الواردة وتفك ترميزه:
var invokeRequest InvokeRequest d := json.NewDecoder(r.Body) d.Decode(&invokeRequest)ثم يتم استخراج الرسالة نفسها باستدعاء لـ
Unmarshal():var parsedMessage string json.Unmarshal(invokeRequest.Data["queueItem"], &parsedMessage)الآن بعد أن أصبحت لديك الرسالة، دعونا نطبعها.
أضف التعليمات البرمجية التالية:
fmt.Println(parsedMessage) // your messageالتعليمة البرمجية مكتوبة كلها الآن، ولكن يتعين عليك تكوين مشروعك حتى تتمكن من اختباره.
في ملف host.json، ابحث عن عنصر
defaultExecutablePathوأعطه قيمة./server.إشعار
بالنسبة لـ Windows، ستستخدم قيمة
.\\server.exe.أنشئ ملف server.go من خلال تشغيل
go buildفي جذر المشروع:go build server.go
قم بتكوين البيئة
الخطوة التالية هي تكوين البيئة. نظرا لأنك تطور محلياً، يتعين عليك إعدادها حتى تتمكن من التواصل مع قائمة انتظار رسائل تمت محاكاتها.
في ملف local.settings.json، ابحث عن عنصر في
ValuesيسمىAzureWebJobsStorage(أو أضفه إذا كان مفقوداً). أعطه قيمةUseDevelopmentStorage=true. يجب أن يبدو إدخال JSON كما يلي:"AzureWebJobsStorage" : "UseDevelopmentStorage=true"ابدأ تشغيل ملحق Azurite من خلال فتح لوحة الأوامر(View>Command Palette)، ثم تحديد Azurite: Start Queue Service.
إشعار
ستنشئ هذه الخطوة بعض الملفات المحلية في مشروعك.
افتح Azure Storage Explorer. على الجانب الأيسر، تظهر محتويات المحاكي.
انقر بزر الماوس الأيمن فوق عقدة Queues وحدد الخيار لإنشاء قائمة انتظار جديدة. أعطها اسم items.
إشعار
يمكنك تسمية قائمة الانتظار بأي اسم تريده. ومع ذلك، فأنت على وشك تكوين ملف function.json. مهما كان اسم قائمة الانتظار هنا، فإنه يتعين أن يكون في function.json.
حدد موقع function.json ضمن دليل
queueTrigger. تأكد من أن صفيفbindingsيحتوي على الإدخال التالي:{ "name": "queueItem", "type": "queueTrigger", "direction": "in", "queueName" : "items", "connection": "AzureWebJobsStorage" }خاصية
queueNameلها نفس اسم قائمة الانتظار التي أنشأتها في Azure Storage Explorer. تشير خاصيةconnectionإلى القيمة التي أعددتها في local.settings.json.قيمة خاصية
nameهيqueueItem. تستخدم تعليمة Go البرمجية هذه القيمة لتحليل رسالة قائمة الانتظار.
تشغيل التطبيق
تم إعداد كل شيء الآن. كل ما يتعين عليك فعله هو تشغيل التطبيق، وبدء Azure Storage Explorer، وإنشاء رسالة قائمة انتظار. يجب أن تتمكن تعليمتك البرمجية من استهلاك تلك الرسالة.
من وحدة طرفية، شغِّل أمر
func startفي جذر المشروع:func startفي تعليمة Visual Studio البرمجية، افتح لوحة الأوامر ثم شغِّل Azurite: Start Queue Service.
ابدأ تشغيل Azure Storage Explorer، إذا لم يكن قد بدأ تشغيله بالفعل.
في Azure Storage Explorer، حدد Add Message:
في مربع الحوار الذي يظهر، أدخل رسالة وحدد OK. الآن راجع تفاصيل الرسالة التي أنشأتها.
في تعليمة Visual Studio البرمجية، يجب أن تعمل الوظيفة الآن. في الوحدة الطرفية، يجب أن ترى الآن الرسالة مطبوعةً كآخر صف.
لقد تمكنت الوظيفة من استهلاك رسالة قائمة الانتظار وكتابة محتواها.
تهانينا! لقد تمكنتَ من إنشاء وظيفة Azure في Go يمكن تشغيلها على رسالة قائمة انتظار. لقد تمكنتَ أيضاً من تحليل تلك الرسالة.
لك مطلق الحرية في استخدام الرسالة الواردة كما تشاء. على سبيل المثال، يمكنك تخزينها في قاعدة بيانات أو ربما إرسالها كحمولة في طلب ويب.