البرنامج التعليمي: بدء استخدام مشغلات وروابط Azure Functions في ذاكرة التخزين المؤقت Azure ل Redis
يوضح هذا البرنامج التعليمي كيفية تنفيذ المشغلات الأساسية باستخدام Azure Cache ل Redis وAzure Functions. يرشدك خلال استخدام Visual Studio Code (VS Code) لكتابة وظيفة Azure ونشرها في C#.
في هذا البرنامج التعليمي، تتعلم كيفية:
- إعداد الأدوات اللازمة.
- تكوين ذاكرة التخزين المؤقت والاتصال بها.
- إنشاء دالة Azure ونشر التعليمات البرمجية إليها.
- تأكد من تسجيل المشغلات.
المتطلبات الأساسية
- اشتراك Azure. إذا لم يكن لديك اشتراك Azure، فأنشئ حسابًا مجانًا.
- تعليمة Visual Studio البرمجية.
إعداد Azure Cache لمثيل Redis
إنشاء Azure Cache لمثيل Redis جديد باستخدام مدخل Microsoft Azure أو أداة CLI المفضلة لديك. يستخدم هذا البرنامج التعليمي مثيل C1 القياسي، وهو نقطة بداية جيدة. استخدم دليل التشغيل السريع للبدء.
يجب أن تكون الإعدادات الافتراضية كافية. يستخدم هذا البرنامج التعليمي نقطة نهاية عامة للعرض التوضيحي، ولكن نوصي باستخدام نقطة نهاية خاصة لأي شيء في الإنتاج.
قد يستغرق إنشاء ذاكرة التخزين المؤقت بضع دقائق. يمكنك الانتقال إلى القسم التالي أثناء انتهاء العملية.
إعداد Visual Studio Code
إذا لم تقم بتثبيت ملحق Azure Functions ل VS Code بعد، فابحث عن Azure Functions في قائمة EXTENSIONS ، ثم حدد Install. إذا لم يكن ملحق C# مثبتا لديك، فقم بتثبيته أيضا.
انتقل إلى علامة التبويب Azure . سجل الدخول إلى حساب Azure الخاص بك.
لتخزين المشروع الذي تقوم بإنشائه، قم بإنشاء مجلد محلي جديد على الكمبيوتر. يستخدم هذا البرنامج التعليمي RedisAzureFunctionDemo كمثال.
في علامة التبويب Azure ، قم بإنشاء تطبيق وظائف جديد عن طريق تحديد أيقونة البرق في الجزء العلوي الأيسر من علامة التبويب مساحة العمل.
حدد Create function....
حدد المجلد الذي قمت بإنشائه لبدء إنشاء مشروع Azure Functions جديد. يمكنك الحصول على العديد من المطالبات على الشاشة. حدد:
- C# كلغة.
- .NET 8.0 Isolated LTS كوقت تشغيل .NET.
- تخطي الآن كقالب المشروع.
إذا لم يكن لديك .NET Core SDK مثبتا، فستتم مطالبتك بذلك.
هام
بالنسبة لوظائف .NET، يوصى باستخدام نموذج العامل المعزول عبر النموذج قيد المعالجة. للمقارنة بين نماذج العامل قيد المعالجة والنموذج المعزول، راجع الاختلافات بين نموذج العامل المعزول والنموذج قيد المعالجة ل .NET على Azure Functions. يستخدم هذا النموذج نموذج العامل المعزول.
تأكد من ظهور المشروع الجديد في جزء EXPLORER .
تثبيت حزمة NuGet الضرورية
تحتاج إلى تثبيت Microsoft.Azure.Functions.Worker.Extensions.Redis
، حزمة NuGet لملحق Redis الذي يسمح باستخدام إعلامات مساحة مفاتيح Redis كمشغلات في Azure Functions.
قم بتثبيت هذه الحزمة عن طريق الانتقال إلى علامة التبويب Terminal في VS Code وإدخال الأمر التالي:
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Redis --prerelease
إشعار
Microsoft.Azure.Functions.Worker.Extensions.Redis
يتم استخدام الحزمة لوظائف معالجة العامل المعزولة .NET. ستستخدم وظائف .NET قيد المعالجة وجميع اللغات الأخرى الحزمة Microsoft.Azure.WebJobs.Extensions.Redis
بدلا من ذلك.
تكوين ذاكرة التخزين المؤقت
انتقل إلى Azure Cache لمثيل Redis الذي تم إنشاؤه حديثا.
انتقل إلى ذاكرة التخزين المؤقت في مدخل Microsoft Azure، ثم:
في قائمة الموارد، حدد Advanced settings.
قم بالتمرير لأسفل إلى مربع notify-keyspace-events وأدخل KEA.
KEA هي سلسلة تكوين تمكن إعلامات مساحة المفاتيح لجميع المفاتيح والأحداث. لمزيد من المعلومات حول سلاسل تكوين مساحة المفاتيح، راجع وثائق Redis.
حدد حفظ في أعلى النافذة.
حدد موقع مفاتيح Access في قائمة الموارد، ثم اكتب محتويات مربع سلسلة الاتصال الأساسي أو انسخها. يتم استخدام هذه السلسلة للاتصال بذاكرة التخزين المؤقت.
إعداد مثال التعليمات البرمجية لمشغلات Redis
في VS Code، أضف ملفا يسمى Common.cs إلى المشروع. يتم استخدام هذه الفئة للمساعدة في تحليل استجابة JSON المتسلسلة ل PubSubTrigger.
انسخ التعليمات البرمجية التالية والصقها في ملف Common.cs :
public class Common { public const string connectionString = "redisConnectionString"; public class ChannelMessage { public string SubscriptionChannel { get; set; } public string Channel { get; set; } public string Message { get; set; } } }
إضافة ملف يسمى RedisTriggers.cs إلى المشروع.
انسخ والصق نموذج التعليمات البرمجية التالي في الملف الجديد:
using Microsoft.Extensions.Logging; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Extensions.Redis; public class RedisTriggers { private readonly ILogger<RedisTriggers> logger; public RedisTriggers(ILogger<RedisTriggers> logger) { this.logger = logger; } // PubSubTrigger function listens to messages from the 'pubsubTest' channel. [Function("PubSubTrigger")] public void PubSub( [RedisPubSubTrigger(Common.connectionString, "pubsubTest")] Common.ChannelMessage channelMessage) { logger.LogInformation($"Function triggered on pub/sub message '{channelMessage.Message}' from channel '{channelMessage.Channel}'."); } // KeyeventTrigger function listens to key events from the 'del' operation. [Function("KeyeventTrigger")] public void Keyevent( [RedisPubSubTrigger(Common.connectionString, "__keyevent@0__:del")] Common.ChannelMessage channelMessage) { logger.LogInformation($"Key '{channelMessage.Message}' deleted."); } // KeyspaceTrigger function listens to key events on the 'keyspaceTest' key. [Function("KeyspaceTrigger")] public void Keyspace( [RedisPubSubTrigger(Common.connectionString, "__keyspace@0__:keyspaceTest")] Common.ChannelMessage channelMessage) { logger.LogInformation($"Key 'keyspaceTest' was updated with operation '{channelMessage.Message}'"); } // ListTrigger function listens to changes to the 'listTest' list. [Function("ListTrigger")] public void List( [RedisListTrigger(Common.connectionString, "listTest")] string response) { logger.LogInformation(response); } // StreamTrigger function listens to changes to the 'streamTest' stream. [Function("StreamTrigger")] public void Stream( [RedisStreamTrigger(Common.connectionString, "streamTest")] string response) { logger.LogInformation(response); } }
يوضح هذا البرنامج التعليمي طرقا متعددة لتشغيل نشاط Redis:
PubSubTrigger
، الذي يتم تشغيله عند نشر نشاط إلى قناة Pub/Sub المسماةpubsubTest
.KeyspaceTrigger
، الذي تم إنشاؤه على مشغل Pub/Sub. استخدمه للبحث عن تغييرات علىkeyspaceTest
المفتاح.KeyeventTrigger
، الذي تم إنشاؤه أيضا على مشغل Pub/Sub. استخدمه للبحث عن أي استخدامDEL
للأمر.ListTrigger
، الذي يبحث عن تغييرات فيlistTest
القائمة.StreamTrigger
، الذي يبحث عن تغييرات فيstreamTest
الدفق.
الاتصال بذاكرة التخزين المؤقت
لتشغيل نشاط Redis، تحتاج إلى تمرير سلسلة الاتصال مثيل ذاكرة التخزين المؤقت. يتم تخزين هذه المعلومات في ملف local.settings.json الذي تم إنشاؤه تلقائيا في المجلد الخاص بك. نوصي باستخدام ملف الإعدادات المحلية كأفضل ممارسة أمان.
للاتصال بذاكرة التخزين المؤقت، أضف مقطعا
ConnectionStrings
في ملف local.settings.json، ثم أضف سلسلة الاتصال باستخدام المعلمةredisConnectionString
. يجب أن يبدو المقطع مثل هذا المثال:{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "", "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated", "redisConnectionString": "<your-connection-string>" } }
تبحث التعليمات البرمجية في Common.cs عن هذه القيمة عند تشغيلها محليا:
public const string connectionString = "redisConnectionString";
هام
هذا المثال مبسط في البرنامج التعليمي. لاستخدام الإنتاج، نوصي باستخدام Azure Key Vault لتخزين معلومات سلسلة الاتصال أو المصادقة على مثيل Redis باستخدام EntraID.
إنشاء التعليمات البرمجية وتشغيلها محليا
قم بالتبديل إلى علامة التبويب Run and debug في VS Code وحدد السهم الأخضر لتصحيح التعليمات البرمجية محليا. إذا لم يكن لديك أدوات Azure Functions الأساسية مثبتة، فستتم مطالبتك بذلك. في هذه الحالة، ستحتاج إلى إعادة تشغيل VS Code بعد التثبيت.
يجب إنشاء التعليمات البرمجية بنجاح. يمكنك تتبع تقدمه في إخراج المحطة الطرفية.
لاختبار وظيفة المشغل، حاول إنشاء المفتاح وحذفه
keyspaceTest
.يمكنك استخدام أي طريقة تفضلها للاتصال بذاكرة التخزين المؤقت. طريقة سهلة هي استخدام أداة وحدة التحكم المضمنة في مدخل Azure Cache for Redis. انتقل إلى مثيل ذاكرة التخزين المؤقت في مدخل Microsoft Azure، ثم حدد وحدة التحكم لفتحه.
بعد فتح وحدة التحكم، جرب الأوامر التالية:
SET keyspaceTest 1
SET keyspaceTest 2
DEL keyspaceTest
PUBLISH pubsubTest testMessage
LPUSH listTest test
XADD streamTest * name Clippy
تأكد من تنشيط المشغلات في المحطة الطرفية.
إضافة روابط Redis
تضيف الروابط طريقة مبسطة لقراءة البيانات المخزنة على مثيل Redis أو كتابتها. لإظهار فائدة الروابط، نضيف دالتين أخريين. يسمى SetGetter
أحدها ، والذي يتم تشغيله في كل مرة يتم فيها تعيين مفتاح وإرجاع القيمة الجديدة للمفتاح باستخدام ربط إدخال. يسمى StreamSetter
الآخر ، الذي يتم تشغيله عند إضافة عنصر جديد إلى الدفق myStream
ويستخدم ربط إخراج لكتابة القيمة true
إلى المفتاح newStreamEntry
.
إضافة ملف يسمى RedisBindings.cs إلى المشروع.
انسخ والصق نموذج التعليمات البرمجية التالي في الملف الجديد:
using Microsoft.Extensions.Logging; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Extensions.Redis; public class RedisBindings { private readonly ILogger<RedisBindings> logger; public RedisBindings(ILogger<RedisBindings> logger) { this.logger = logger; } //This example uses the PubSub trigger to listen to key events on the 'set' operation. A Redis Input binding is used to get the value of the key being set. [Function("SetGetter")] public void SetGetter( [RedisPubSubTrigger(Common.connectionString, "__keyevent@0__:set")] Common.ChannelMessage channelMessage, [RedisInput(Common.connectionString, "GET {Message}")] string value) { logger.LogInformation($"Key '{channelMessage.Message}' was set to value '{value}'"); } //This example uses the PubSub trigger to listen to key events to the key 'key1'. When key1 is modified, a Redis Output binding is used to set the value of the 'key1modified' key to 'true'. [Function("SetSetter")] [RedisOutput(Common.connectionString, "SET")] public string SetSetter( [RedisPubSubTrigger(Common.connectionString, "__keyspace@0__:key1")] Common.ChannelMessage channelMessage) { logger.LogInformation($"Key '{channelMessage.Message}' was updated. Setting the value of 'key1modified' to 'true'"); return $"key1modified true"; } }
قم بالتبديل إلى علامة التبويب Run and debug في VS Code وحدد السهم الأخضر لتصحيح التعليمات البرمجية محليا. يجب إنشاء التعليمات البرمجية بنجاح. يمكنك تتبع تقدمه في إخراج المحطة الطرفية.
لاختبار وظيفة ربط الإدخال، حاول تعيين قيمة جديدة لأي مفتاح، على سبيل المثال باستخدام الأمر
SET hello world
يجب أن ترى أن الدالةSetGetter
تقوم بتشغيل القيمة المحدثة وإرجاعها.لاختبار وظيفة ربط الإخراج، حاول إضافة عنصر جديد إلى الدفق
myStream
باستخدام الأمرXADD myStream * item Order1
. لاحظ أن الدالة التيStreamSetter
تم تشغيلها على إدخال الدفق الجديد وتعيين القيمةtrue
إلى مفتاح آخر يسمىnewStreamEntry
. يؤدي هذاset
الأمر أيضا إلى تشغيل الدالةSetGetter
.
نشر التعليمات البرمجية إلى دالة Azure
إنشاء دالة Azure جديدة:
ارجع إلى علامة التبويب Azure وقم بتوسيع اشتراكك.
انقر بزر الماوس الأيمن فوق Function App، ثم حدد Create Function App في Azure (Advanced) .
تحصل على العديد من المطالبات للحصول على معلومات لتكوين تطبيق الوظائف الجديد:
- أدخل اسمًا فريدًا.
- حدد .NET 8 Isolated كمكدس وقت التشغيل.
- حدد إما Linux أو Windows (إما يعمل).
- حدد مجموعة موارد موجودة أو جديدة للاحتفاظ بتطبيق الوظائف.
- حدد نفس المنطقة مثل مثيل ذاكرة التخزين المؤقت.
- حدد Premium كخطة استضافة.
- إنشاء خطة Azure App Service جديدة.
- حدد مستوى تسعير EP1 .
- حدد حساب تخزين موجودا أو أنشئ حسابا جديدا.
- إنشاء مورد Application Insights جديد. يمكنك استخدام المورد للتأكد من أن المشغل يعمل.
هام
مشغلات Redis غير مدعومة حاليا في وظائف الاستهلاك.
انتظر بضع دقائق حتى يتم إنشاء تطبيق الوظائف الجديد. يظهر ضمن Function App في اشتراكك. انقر بزر الماوس الأيمن فوق تطبيق الوظائف الجديد، ثم حدد Deploy to Function App.
يقوم التطبيق بإنشاء وبدء النشر. يمكنك تتبع تقدمه في نافذة الإخراج.
إضافة معلومات سلسلة الاتصال
في مدخل Microsoft Azure، انتقل إلى تطبيق الوظائف الجديد وحدد متغيرات البيئة من قائمة الموارد.
في جزء العمل، انتقل إلى إعدادات التطبيق.
بالنسبة إلى Name، أدخل redisConnectionString.
بالنسبة إلى Value، أدخل سلسلة الاتصال.
حدد تطبيق على الصفحة للتأكيد.
انتقل إلى جزء Overview وحدد Restart لإعادة تشغيل تطبيق الوظائف باستخدام معلومات سلسلة الاتصال.
اختبار المشغلات والروابط
بعد اكتمال النشر وإضافة معلومات سلسلة الاتصال، افتح تطبيق الوظائف في مدخل Microsoft Azure. ثم حدد Log Stream من قائمة الموارد.
انتظر حتى يتصل Log Analytics، ثم استخدم وحدة تحكم Redis لتنشيط أي من المشغلات. تأكد من تسجيل المشغلات هنا.
تنظيف الموارد
إذا كنت تريد الاستمرار في استخدام الموارد التي قمت بإنشائها في هذه المقالة، فاحتفظ بمجموعة الموارد.
وإلا، لتجنب الرسوم المتعلقة بالموارد، إذا انتهيت من استخدام الموارد، يمكنك حذف مجموعة موارد Azure التي قمت بإنشائها.
تحذير
حذف مجموعة الموارد لا يمكن التراجع عنه. عند حذف مجموعة موارد، يتم حذف كافة الموارد في مجموعة الموارد نهائيا. تأكد من عدم حذف مجموعة الموارد الخاطئة أو الموارد غير الصحيحة بطريق الخطأ. إذا قمت بإنشاء الموارد داخل مجموعة موارد موجودة تحتوي على موارد تريد الاحتفاظ بها، يمكنك حذف كل مورد على حدة بدلا من حذف مجموعة الموارد.
حذف مجموعة موارد
سجل الدخول إلى مدخل Azure، وحدد "Resource groups".
حدد مجموعة الموارد المراد حذفها.
إذا كان هناك العديد من مجموعات الموارد، في تصفية لأي حقل، أدخل اسم مجموعة الموارد التي قمت بإنشائها لإكمال هذه المقالة. في قائمة نتائج البحث، حدد مجموعة الموارد.
حدد Delete resource group.
في جزء حذف مجموعة موارد، أدخل اسم مجموعة الموارد للتأكيد، ثم حدد حذف.
في غضون لحظات قليلة، يتم حذف مجموعة الموارد وجميع مواردها.