البرنامج التعليمي: بدء استخدام مشغلات وروابط Azure Functions في ذاكرة التخزين المؤقت Azure ل Redis

يوضح هذا البرنامج التعليمي كيفية تنفيذ المشغلات الأساسية باستخدام Azure Cache ل Redis وAzure Functions. يرشدك خلال استخدام Visual Studio Code (VS Code) لكتابة وظيفة Azure ونشرها في C#‎.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • إعداد الأدوات اللازمة.
  • تكوين ذاكرة التخزين المؤقت والاتصال بها.
  • إنشاء دالة Azure ونشر التعليمات البرمجية إليها.
  • تأكد من تسجيل المشغلات.

المتطلبات الأساسية

إعداد Azure Cache لمثيل Redis

إنشاء Azure Cache لمثيل Redis جديد باستخدام مدخل Microsoft Azure أو أداة CLI المفضلة لديك. يستخدم هذا البرنامج التعليمي مثيل C1 القياسي، وهو نقطة بداية جيدة. استخدم دليل التشغيل السريع للبدء.

لقطة شاشة لإنشاء ذاكرة تخزين مؤقت في مدخل Microsoft Azure.

يجب أن تكون الإعدادات الافتراضية كافية. يستخدم هذا البرنامج التعليمي نقطة نهاية عامة للعرض التوضيحي، ولكن نوصي باستخدام نقطة نهاية خاصة لأي شيء في الإنتاج.

قد يستغرق إنشاء ذاكرة التخزين المؤقت بضع دقائق. يمكنك الانتقال إلى القسم التالي أثناء انتهاء العملية.

إعداد Visual Studio Code

  1. إذا لم تقم بتثبيت ملحق Azure Functions ل VS Code بعد، فابحث عن Azure Functions في قائمة EXTENSIONS ، ثم حدد Install. إذا لم يكن ملحق C# مثبتا لديك، فقم بتثبيته أيضا.

    لقطة شاشة للملحقات المطلوبة المثبتة في VS Code.

  2. انتقل إلى علامة التبويب Azure . سجل الدخول إلى حساب Azure الخاص بك.

  3. لتخزين المشروع الذي تقوم بإنشائه، قم بإنشاء مجلد محلي جديد على الكمبيوتر. يستخدم هذا البرنامج التعليمي RedisAzureFunctionDemo كمثال.

  4. في علامة التبويب Azure ، قم بإنشاء تطبيق وظائف جديد عن طريق تحديد أيقونة البرق في الجزء العلوي الأيسر من علامة التبويب مساحة العمل.

  5. حدد Create function....

    لقطة شاشة تعرض رمز إضافة دالة جديدة من VS Code.

  6. حدد المجلد الذي قمت بإنشائه لبدء إنشاء مشروع Azure Functions جديد. يمكنك الحصول على العديد من المطالبات على الشاشة. حدد:

    • C#‎ كلغة.
    • .NET 8.0 Isolated LTS كوقت تشغيل .NET.
    • تخطي الآن كقالب المشروع.

    إذا لم يكن لديك .NET Core SDK مثبتا، فستتم مطالبتك بذلك.

    هام

    بالنسبة لوظائف .NET، يوصى باستخدام نموذج العامل المعزول عبر النموذج قيد المعالجة. للمقارنة بين نماذج العامل قيد المعالجة والنموذج المعزول، راجع الاختلافات بين نموذج العامل المعزول والنموذج قيد المعالجة ل .NET على Azure Functions. يستخدم هذا النموذج نموذج العامل المعزول.

  7. تأكد من ظهور المشروع الجديد في جزء EXPLORER .

    لقطة شاشة لمساحة عمل في VS Code.

تثبيت حزمة 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 بدلا من ذلك.

تكوين ذاكرة التخزين المؤقت

  1. انتقل إلى Azure Cache لمثيل Redis الذي تم إنشاؤه حديثا.

  2. انتقل إلى ذاكرة التخزين المؤقت في مدخل Microsoft Azure، ثم:

    1. في قائمة الموارد، حدد Advanced settings.

    2. قم بالتمرير لأسفل إلى مربع notify-keyspace-events وأدخل KEA.

      KEA هي سلسلة تكوين تمكن إعلامات مساحة المفاتيح لجميع المفاتيح والأحداث. لمزيد من المعلومات حول سلاسل تكوين مساحة المفاتيح، راجع وثائق Redis.

    3. حدد حفظ في أعلى النافذة.

    لقطة شاشة للإعدادات المتقدمة ل Azure Cache ل Redis في المدخل.

  3. حدد موقع مفاتيح Access في قائمة الموارد، ثم اكتب محتويات مربع سلسلة الاتصال الأساسي أو انسخها. يتم استخدام هذه السلسلة للاتصال بذاكرة التخزين المؤقت.

    لقطة شاشة تعرض سلسلة الاتصال الأساسي لمفتاح الوصول.

إعداد مثال التعليمات البرمجية لمشغلات Redis

  1. في VS Code، أضف ملفا يسمى Common.cs إلى المشروع. يتم استخدام هذه الفئة للمساعدة في تحليل استجابة JSON المتسلسلة ل PubSubTrigger.

  2. انسخ التعليمات البرمجية التالية والصقها في ملف 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; }
        }
    }
    
  3. إضافة ملف يسمى RedisTriggers.cs إلى المشروع.

  4. انسخ والصق نموذج التعليمات البرمجية التالي في الملف الجديد:

    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);
        }
    }
    
  5. يوضح هذا البرنامج التعليمي طرقا متعددة لتشغيل نشاط Redis:

    • PubSubTrigger، الذي يتم تشغيله عند نشر نشاط إلى قناة Pub/Sub المسماة pubsubTest.
    • KeyspaceTrigger، الذي تم إنشاؤه على مشغل Pub/Sub. استخدمه للبحث عن تغييرات على keyspaceTest المفتاح.
    • KeyeventTrigger، الذي تم إنشاؤه أيضا على مشغل Pub/Sub. استخدمه للبحث عن أي استخدام DEL للأمر.
    • ListTrigger، الذي يبحث عن تغييرات في listTest القائمة.
    • StreamTrigger، الذي يبحث عن تغييرات في streamTest الدفق.

الاتصال بذاكرة التخزين المؤقت

  1. لتشغيل نشاط Redis، تحتاج إلى تمرير سلسلة الاتصال مثيل ذاكرة التخزين المؤقت. يتم تخزين هذه المعلومات في ملف local.settings.json الذي تم إنشاؤه تلقائيا في المجلد الخاص بك. نوصي باستخدام ملف الإعدادات المحلية كأفضل ممارسة أمان.

  2. للاتصال بذاكرة التخزين المؤقت، أضف مقطعا 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.

إنشاء التعليمات البرمجية وتشغيلها محليا

  1. قم بالتبديل إلى علامة التبويب Run and debug في VS Code وحدد السهم الأخضر لتصحيح التعليمات البرمجية محليا. إذا لم يكن لديك أدوات Azure Functions الأساسية مثبتة، فستتم مطالبتك بذلك. في هذه الحالة، ستحتاج إلى إعادة تشغيل VS Code بعد التثبيت.

  2. يجب إنشاء التعليمات البرمجية بنجاح. يمكنك تتبع تقدمه في إخراج المحطة الطرفية.

  3. لاختبار وظيفة المشغل، حاول إنشاء المفتاح وحذفه keyspaceTest .

    يمكنك استخدام أي طريقة تفضلها للاتصال بذاكرة التخزين المؤقت. طريقة سهلة هي استخدام أداة وحدة التحكم المضمنة في مدخل Azure Cache for Redis. انتقل إلى مثيل ذاكرة التخزين المؤقت في مدخل Microsoft Azure، ثم حدد وحدة التحكم لفتحه.

    لقطة شاشة للتعليمات البرمجية C-Sharp سلسلة الاتصال.

    بعد فتح وحدة التحكم، جرب الأوامر التالية:

    • SET keyspaceTest 1
    • SET keyspaceTest 2
    • DEL keyspaceTest
    • PUBLISH pubsubTest testMessage
    • LPUSH listTest test
    • XADD streamTest * name Clippy

    لقطة شاشة لوحدة تحكم وبعض أوامر ونتائج Redis.

  4. تأكد من تنشيط المشغلات في المحطة الطرفية.

    لقطة شاشة لمحرر VS Code مع تشغيل التعليمات البرمجية.

إضافة روابط Redis

تضيف الروابط طريقة مبسطة لقراءة البيانات المخزنة على مثيل Redis أو كتابتها. لإظهار فائدة الروابط، نضيف دالتين أخريين. يسمى SetGetterأحدها ، والذي يتم تشغيله في كل مرة يتم فيها تعيين مفتاح وإرجاع القيمة الجديدة للمفتاح باستخدام ربط إدخال. يسمى StreamSetterالآخر ، الذي يتم تشغيله عند إضافة عنصر جديد إلى الدفق myStream ويستخدم ربط إخراج لكتابة القيمة true إلى المفتاح newStreamEntry.

  1. إضافة ملف يسمى RedisBindings.cs إلى المشروع.

  2. انسخ والصق نموذج التعليمات البرمجية التالي في الملف الجديد:

    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";
        }
    }
    
  3. قم بالتبديل إلى علامة التبويب Run and debug في VS Code وحدد السهم الأخضر لتصحيح التعليمات البرمجية محليا. يجب إنشاء التعليمات البرمجية بنجاح. يمكنك تتبع تقدمه في إخراج المحطة الطرفية.

  4. لاختبار وظيفة ربط الإدخال، حاول تعيين قيمة جديدة لأي مفتاح، على سبيل المثال باستخدام الأمر SET hello world يجب أن ترى أن الدالة SetGetter تقوم بتشغيل القيمة المحدثة وإرجاعها.

  5. لاختبار وظيفة ربط الإخراج، حاول إضافة عنصر جديد إلى الدفق myStream باستخدام الأمر XADD myStream * item Order1. لاحظ أن الدالة التي StreamSetter تم تشغيلها على إدخال الدفق الجديد وتعيين القيمة true إلى مفتاح آخر يسمى newStreamEntry. يؤدي هذا set الأمر أيضا إلى تشغيل الدالة SetGetter .

نشر التعليمات البرمجية إلى دالة Azure

  1. إنشاء دالة Azure جديدة:

    1. ارجع إلى علامة التبويب Azure وقم بتوسيع اشتراكك.

    2. انقر بزر الماوس الأيمن فوق Function App، ثم حدد Create Function App في Azure (Advanced) .

    لقطة شاشة للتحديدات لإنشاء تطبيق دالة في VS Code.

  2. تحصل على العديد من المطالبات للحصول على معلومات لتكوين تطبيق الوظائف الجديد:

    • أدخل اسمًا فريدًا.
    • حدد .NET 8 Isolated كمكدس وقت التشغيل.
    • حدد إما Linux أو Windows (إما يعمل).
    • حدد مجموعة موارد موجودة أو جديدة للاحتفاظ بتطبيق الوظائف.
    • حدد نفس المنطقة مثل مثيل ذاكرة التخزين المؤقت.
    • حدد Premium كخطة استضافة.
    • إنشاء خطة Azure App Service جديدة.
    • حدد مستوى تسعير EP1 .
    • حدد حساب تخزين موجودا أو أنشئ حسابا جديدا.
    • إنشاء مورد Application Insights جديد. يمكنك استخدام المورد للتأكد من أن المشغل يعمل.

    هام

    مشغلات Redis غير مدعومة حاليا في وظائف الاستهلاك.

  3. انتظر بضع دقائق حتى يتم إنشاء تطبيق الوظائف الجديد. يظهر ضمن Function App في اشتراكك. انقر بزر الماوس الأيمن فوق تطبيق الوظائف الجديد، ثم حدد Deploy to Function App.

    لقطة شاشة للتحديدات للنشر في تطبيق دالة في VS Code.

  4. يقوم التطبيق بإنشاء وبدء النشر. يمكنك تتبع تقدمه في نافذة الإخراج.

إضافة معلومات سلسلة الاتصال

  1. في مدخل Microsoft Azure، انتقل إلى تطبيق الوظائف الجديد وحدد متغيرات البيئة من قائمة الموارد.

  2. في جزء العمل، انتقل إلى إعدادات التطبيق.

  3. بالنسبة إلى Name، أدخل redisConnectionString.

  4. بالنسبة إلى Value، أدخل سلسلة الاتصال.

  5. حدد تطبيق على الصفحة للتأكيد.

  6. انتقل إلى جزء Overview وحدد Restart لإعادة تشغيل تطبيق الوظائف باستخدام معلومات سلسلة الاتصال.

اختبار المشغلات والروابط

  1. بعد اكتمال النشر وإضافة معلومات سلسلة الاتصال، افتح تطبيق الوظائف في مدخل Microsoft Azure. ثم حدد Log Stream من قائمة الموارد.

  2. انتظر حتى يتصل Log Analytics، ثم استخدم وحدة تحكم Redis لتنشيط أي من المشغلات. تأكد من تسجيل المشغلات هنا.

    لقطة شاشة لدفق سجل لمورد تطبيق دالة في قائمة الموارد.

تنظيف الموارد

إذا كنت تريد الاستمرار في استخدام الموارد التي قمت بإنشائها في هذه المقالة، فاحتفظ بمجموعة الموارد.

وإلا، لتجنب الرسوم المتعلقة بالموارد، إذا انتهيت من استخدام الموارد، يمكنك حذف مجموعة موارد Azure التي قمت بإنشائها.

تحذير

حذف مجموعة الموارد لا يمكن التراجع عنه. عند حذف مجموعة موارد، يتم حذف كافة الموارد في مجموعة الموارد نهائيا. تأكد من عدم حذف مجموعة الموارد الخاطئة أو الموارد غير الصحيحة بطريق الخطأ. إذا قمت بإنشاء الموارد داخل مجموعة موارد موجودة تحتوي على موارد تريد الاحتفاظ بها، يمكنك حذف كل مورد على حدة بدلا من حذف مجموعة الموارد.

حذف مجموعة موارد

  1. سجل الدخول إلى مدخل Azure، وحدد "Resource groups".

  2. حدد مجموعة الموارد المراد حذفها.

    إذا كان هناك العديد من مجموعات الموارد، في تصفية لأي حقل، أدخل اسم مجموعة الموارد التي قمت بإنشائها لإكمال هذه المقالة. في قائمة نتائج البحث، حدد مجموعة الموارد.

    لقطة شاشة تعرض قائمة بمجموعات الموارد للاختيار من بينها للحذف.

  3. حدد Delete resource group.

  4. في جزء حذف مجموعة موارد، أدخل اسم مجموعة الموارد للتأكيد، ثم حدد حذف.

    لقطة شاشة تعرض مربعا يتطلب إدخال اسم المورد لتأكيد الحذف.

في غضون لحظات قليلة، يتم حذف مجموعة الموارد وجميع مواردها.