تمرين - معالجة رسالة قائمة انتظار
في هذا التمرين، ستتمكن من توسيع تطبيقك بمسار يمكنه تشغيل رسالة في قائمة انتظار الرسائل.
إشعار
قبل بدء هذا التمرين، تأكد من تنزيل ملحق 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" "io/ioutil" "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 يمكن تشغيلها على رسالة قائمة انتظار. لقد تمكنتَ أيضاً من تحليل تلك الرسالة.
لك مطلق الحرية في استخدام الرسالة الواردة كما تشاء. على سبيل المثال، يمكنك تخزينها في قاعدة بيانات أو ربما إرسالها كحمولة في طلب ويب.