التشغيل السريع: إرسال واستقبال الرسائل من موضوع مساحة اسم Azure Event Grid (.NET)

في هذا التشغيل السريع، تقوم بالخطوات التالية:

  1. إنشاء مساحة اسم شبكة الأحداث، باستخدام مدخل Microsoft Azure.
  2. إنشاء موضوع مساحة اسم شبكة الأحداث، باستخدام مدخل Microsoft Azure.
  3. إنشاء اشتراك حدث، باستخدام مدخل Microsoft Azure.
  4. كتابة تطبيق وحدة تحكم .NET لإرسال مجموعة من الرسائل إلى الموضوع
  5. اكتب تطبيق وحدة تحكم .NET لتلقي تلك الرسائل من الموضوع.

إشعار

يوفر هذا التشغيل السريع إرشادات خطوة بخطوة لتنفيذ سيناريو بسيط لإرسال دفعة من الرسائل إلى Event Grid Namespace Topic ثم تلقيها. للحصول على نظرة عامة على مكتبة عميل .NET، راجع مكتبة عميل Azure Event Grid ل .NET. لمزيد من العينات، راجع عينات Event Grid .NET على GitHub.

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

إذا كنت مستخدما جديدا للخدمة، فشاهد نظرة عامة على Event Grid قبل القيام بهذا التشغيل السريع.

  • اشتراك Azure. لاستخدام خدمات Azure، بما في ذلك Azure Event Grid، تحتاج إلى اشتراك. إذا لم يكن لديك حساب Azure موجود، يمكنك الاشتراك في إصدار تجريبي مجاني.
  • Visual Studio 2022. يستخدم نموذج التطبيق الميزات الجديدة التي تم تقديمها في C# 10. لاستخدام أحدث بناء جملة، نوصي بتثبيت .NET 6.0 أو أعلى وتعيين إصدار اللغة إلى latest. إذا كنت تستخدم Visual Studio، فإن الإصدارات قبل Visual Studio 2022 غير متوافقة مع الأدوات اللازمة لإنشاء مشاريع C# 10.

إنشاء مساحة اسم في مدخل Microsoft Azure

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

يرجى اتباع الأقسام التالية لإنشاء مساحة اسم Azure Event Grid وعرضها وإدارتها.

لإنشاء مساحة اسم:

  1. تسجيل الدخول إلى مدخل Azure.

  2. في مربع البحث، أدخل Event Grid Namespaces وحدد Event Grid Namespaces من النتائج.

    لقطة شاشة تعرض مساحات أسماء شبكة الأحداث في نتائج البحث.

  3. في صفحة مساحات أسماء شبكة الأحداث، حدد + إنشاء على شريط الأدوات.

    لقطة شاشة تعرض صفحة مساحات أسماء شبكة الأحداث مع تحديد الزر إنشاء على شريط الأدوات.

  4. في صفحة الأساسيات ، اتبع الخطوات التالية.

    1. حدد اشتراك Azure الذي تريد إنشاء مساحة الاسم فيه.

    2. قم باختيار مجموعة موارد، أو تحديد مجموعة موارد موجودة.

    3. أدخل name لمساحة الاسم.

    4. حدد المنطقة أو الموقع الذي تريد إنشاء مساحة الاسم فيه.

    5. حدد مراجعة + إنشاء عند أسفل الصفحة.

      لقطة شاشة تعرض علامة التبويب Basics في صفحة Create namespace.

  5. في علامة التبويب مراجعة + إنشاء ، راجع الإعدادات وحدد إنشاء.

  6. في صفحة Deployment succeeded ، حدد Go to resource للانتقال إلى مساحة الاسم الخاصة بك.

إنشاء موضوع مساحة الاسم

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

  2. في صفحة Event Grid Namespace ، حدد خيار Topics في قسم Event broker في القائمة اليسرى.

  3. في الصفحة مواضيع ، حدد الزر + موضوع على شريط الأوامر.

    لقطة شاشة تعرض إنشاء موضوع مساحة اسم شبكة الأحداث.

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

    لقطة شاشة تعرض أساسيات إنشاء موضوع مساحة اسم شبكة الأحداث.

إنشاء اشتراك حدث

  1. إذا كنت في صفحة Topics لمساحة اسم Event Grid في مدخل Microsoft Azure، فحدد موضوعك من قائمة الموضوعات. إذا كنت في صفحة المواضيع ، فاتبع الإرشادات من إنشاء مواضيع مساحة اسم وعرضها وإدارتها لتحديد الموضوع الذي تريد استخدامه لإنشاء اشتراك الحدث.

    لقطة شاشة تعرض صفحة مواضيع شبكة الأحداث مع تحديد موضوع.

  2. في صفحة Event Gird Namespace Topic ، حدد خيار Subscriptions في قسم Entities في القائمة اليمنى.

  3. في صفحة Subscriptions ، حدد الزر "+ Subscription" على شريط الأوامر.

    لقطة شاشة تعرض إنشاء اشتراك حدث Event Grid.

  4. في علامة التبويب Basics ، اتبع الخطوات التالية:

    1. أدخل اسما للاشتراك الذي تريد إنشاءه

    2. تأكد من تعيين مخطط التسليم Cloud Events v1.0.

    3. تأكد من تعيين وضع التسليم إلى قائمة الانتظار (وضع السحب).

    4. حدد Next: Filters أسفل الصفحة.

      لقطة شاشة تعرض إنشاء أساسيات اشتراك حدث Event Grid.

  5. في علامة التبويب عوامل التصفية ، أضف أسماء أنواع الأحداث التي تريد تصفيتها في الاشتراك وأضف عوامل تصفية سمة السياق التي تريد استخدامها في الاشتراك. ثم حدد Next: Additional features في أسفل الصفحة.

    لقطة شاشة تعرض عوامل تصفية إنشاء اشتراك حدث Event Grid.

  6. في علامة التبويب ميزات إضافية، يمكنك تحديد الاحتفاظ بالحدث والحد الأقصى لعدد التسليم ومدة التأمين وإعدادات الأحرف غير المستخدمة.

    لقطة شاشة تعرض اشتراك حدث Event Grid لإنشاء ميزات إضافية.

  7. ثم حدد إنشاء لإنشاء اشتراك الحدث.

مصادقة التطبيق إلى Azure

يوضح لك هذا التشغيل السريع طرق الاتصال ب Azure Event Grid: سلسلة الاتصال. يوضح لك هذا القسم كيفية استخدام سلسلة الاتصال للاتصال بمساحة اسم شبكة الأحداث. إذا كنت جديدا على Azure، فمن الأسهل اتباع خيار سلسلة الاتصال. يؤدي إنشاء مساحة اسم جديدة لشبكة الأحداث تلقائيا إلى إنشاء مفتاح أساسي وثانوي أولي يمنح كل منها التحكم الكامل في جميع جوانب مساحة الاسم أو الموضوعات. يمكن للعميل استخدام سلسلة الاتصال للاتصال بمساحة اسم شبكة الأحداث. لنسخ مفاتيح الوصول لموضوع مساحة الاسم، اتبع الخطوات التالية:

  1. في صفحة event Grid Namespace ، حدد Topics.

  2. حدد الموضوع الذي تحتاج إلى الوصول إليه.

  3. في صفحة مفاتيح الوصول، حدد زر النسخ بجوار المفتاح 1 أو المفتاح 2، لنسخ مفاتيح الوصول إلى الحافظة لاستخدامها لاحقا. وقم بلصق هذه القيمة في المفكرة أو بعض المواقع المؤقتة الأخرى.

    لقطة شاشة تعرض مفتاح الوصول لموضوع Event Grid.

تشغيل Visual Studio

قم بتشغيل Visual Studio. إذا رأيت نافذة بدء الاستخدام ، فحدد الارتباط متابعة بدون تعليمات برمجية في الجزء الأيمن.

إرسال رسائل إلى الموضوع.

يوضح لك هذا القسم كيفية إنشاء تطبيق وحدة تحكم .NET لإرسال رسائل إلى موضوع Event Grid.

قم بإنشاء تطبيق وحدة تحكم

  1. في Visual Studio، حدد File ->New ->Project menu.

  2. في مربع حوار إنشاء مشروع جديد، نفِّذ الخطوات التالية: في حال عدم رؤية مربع الحوار هذا، حدد ملف من القائمة، وحدد جديد، ثم حدد مشروع.

    1. قم بتحديد C#‎ للغة البرمجة.

    2. قم بتحديد Console لنوع التطبيق.

    3. حدد Console App من قائمة النتائج.

    4. ثم حدد التالي.

      لقطة شاشة تعرض مربع الحوار إنشاء مشروع جديد مع تحديد C# و Console.

  3. أدخل EventSender لاسم المشروع، EventGridQuickStart لاسم الحل، ثم حدد التالي.

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

  4. في الصفحة Additional information، حدد Create لإنشاء الحل والمشروع.

إضافة حزم NuGet إلى المشروع

  1. حدد Tools>NuGet Package Manager>Package Manager Console من القائمة.

  2. قم بتشغيل الأمر التالي لتثبيت حزمة Azure.Messaging.EventGrid NuGet:

    Install-Package Azure.Messaging.EventGrid.Namespaces
    

إضافة تعليمة برمجية لإرسال الحدث إلى موضوع مساحة الاسم

  1. استبدل محتويات Program.cs بالتعليمة البرمجية التالية. يتم توضيح الخطوات المهمة، مع معلومات إضافية في تعليقات التعليمات البرمجية.

    هام

    تحديث قيم العنصر النائب (<NAMESPACE-ENDPOINT> و <TOPIC-NAME>و <TOPIC-ACCESS-KEY>و <TOPIC-SUBSCRIPTION-NAME>) في مقتطف التعليمات البرمجية بنقطة نهاية مساحة الاسم واسم الموضوع ومفتاح الموضوع.

    using Azure.Messaging;
    using Azure;
    using Azure.Messaging.EventGrid.Namespaces;
    
    
    // TODO: Replace the following placeholders with appropriate values
    
    // Endpoint of the namespace that you can find on the Overview page for your Event Grid namespace. Prefix it with https://.
    // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    var namespaceEndpoint = "<NAMESPACE-ENDPOINT>";
    
    // Name of the topic in the namespace
    var topicName = "<TOPIC-NAME>";
    
    // Access key for the topic
    var topicKey = "<TOPIC-ACCESS-KEY>";
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridSenderClient(new Uri(namespaceEndpoint), topicName, new AzureKeyCredential(topicKey));
    
    // Publish a single CloudEvent using a custom TestModel for the event data.
    var @ev = new CloudEvent("employee_source", "type", new TestModel { Name = "Bob", Age = 18 });
    await client.SendAsync(ev);
    
    // Publish a batch of CloudEvents.
    
    await client.SendAsync(
    new[] {
        new CloudEvent("employee_source", "type", new TestModel { Name = "Tom", Age = 55 }),
        new CloudEvent("employee_source", "type", new TestModel { Name = "Alice", Age = 25 })});
    
    Console.WriteLine("Three events have been published to the topic. Press any key to end the application.");
    Console.ReadKey();
    
    public class TestModel
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    
    
  2. أنشئ المشروع، وتأكد من عدم وجود أخطاء.

  3. شغِّل البرنامج وانتظر رسالة التأكيد.

    Three events have been published to the topic. Press any key to end the application.
    

    هام

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

  4. في المدخل Azure، اتبع الخطوات التالية:

    1. انتقل إلى مساحة اسم Event Grid.

    2. في صفحة نظرة عامة ، سترى عدد الأحداث المنشورة إلى مساحة الاسم في المخطط.

      لقطة شاشة تعرض صفحة event Grid Namespace في مدخل Microsoft Azure.

سحب الرسائل من الموضوع

في هذا القسم، يمكنك إنشاء تطبيق وحدة تحكم .NET يتلقى رسائل من الموضوع.

إنشاء مشروع لتلقي CloudEvents المنشورة

  1. في نافذة مستكشف الحلول، انقر بزر الماوس الأيمن فوق حل EventGridQuickStart، وأشر إلى إضافة، وحدد مشروع جديد.
  2. قم بتحديد Console application ثم حدد Next.
  3. أدخل EventReceiver لاسم المشروع، وحدد Create.
  4. في نافذة مستكشف الحلول، انقر بزر الماوس الأيمن فوق EventReceiver، وحدد Set as a Startup Project.

إضافة حزم NuGet إلى المشروع

  1. حدد Tools>NuGet Package Manager>Package Manager Console من القائمة.

  2. قم بتشغيل الأمر التالي لتثبيت حزمة Azure.Messaging.EventGrid NuGet. حدد EventReceiver للمشروع الافتراضي إذا لم يتم تعيينه بالفعل.

    Install-Package Azure.Messaging.EventGrid.Namespaces
    

    لقطة شاشة تعرض مشروع EventReceiver المحدد في مدير الحِزَم Console.

إضافة التعليمات البرمجية لتلقي الأحداث من الموضوع

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

  1. Program ضمن الفئة ، أضف التعليمات البرمجية التالية:

    هام

    تحديث قيم العنصر النائب (<NAMESPACE-ENDPOINT> ، <TOPIC-NAME>، ، <TOPIC-ACCESS-KEY>، ) <TOPIC-SUBSCRIPTION-NAME>في مقتطف التعليمات البرمجية بنقطة نهاية مساحة الاسم، اسم الموضوع، مفتاح الموضوع، اسم اشتراك الموضوع.

    using Azure;
    using Azure.Messaging;
    using Azure.Messaging.EventGrid.Namespaces;
    
    // TODO: Replace the following placeholders with appropriate values
    
    // Endpoint of the namespace that you can find on the Overview page for your Event Grid namespace
    // Example: https://namespace01.eastus-1.eventgrid.azure.net. 
    var namespaceEndpoint = "<NAMESPACE-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    
    // Name of the topic in the namespace
    var topicName = "<TOPIC-NAME>";
    
    // Access key for the topic
    var topicKey = "<TOPIC-ACCESS-KEY>";
    
    // Name of the subscription to the topic
    var subscriptionName = "<TOPIC-SUBSCRIPTION-NAME>";
    
    // Maximum number of events you want to receive
    const short MaxEventCount = 3;
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridReceiverClient(new Uri(namespaceEndpoint), topicName, subscriptionName, new AzureKeyCredential(topicKey));
    
    // Receive the published CloudEvents. 
    ReceiveResult result = await client.ReceiveAsync(MaxEventCount);
    
    Console.WriteLine("Received Response");
    Console.WriteLine("-----------------");
    
    
  2. إلحاق الأساليب التالية بنهاية Program الفئة.

    // handle received messages. Define these variables on the top.
    
    var toRelease = new List<string>();
    var toAcknowledge = new List<string>();
    var toReject = new List<string>();
    
    // Iterate through the results and collect the lock tokens for events we want to release/acknowledge/result
    
    foreach (ReceiveDetails detail in result.Details)
    {
        CloudEvent @event = detail.Event;
        BrokerProperties brokerProperties = detail.BrokerProperties;
        Console.WriteLine(@event.Data.ToString());
    
        // The lock token is used to acknowledge, reject or release the event
        Console.WriteLine(brokerProperties.LockToken);
        Console.WriteLine();
    
        // If the event is from the "employee_source" and the name is "Bob", we are not able to acknowledge it yet, so we release it
        if (@event.Source == "employee_source" && @event.Data.ToObjectFromJson<TestModel>().Name == "Bob")
        {
            toRelease.Add(brokerProperties.LockToken);
        }
        // acknowledge other employee_source events
        else if (@event.Source == "employee_source")
        {
            toAcknowledge.Add(brokerProperties.LockToken);
        }
        // reject all other events
        else
        {
            toReject.Add(brokerProperties.LockToken);
        }
    }
    
    // Release/acknowledge/reject the events
    
    if (toRelease.Count > 0)
    {
        ReleaseResult releaseResult = await client.ReleaseAsync(toRelease);
    
        // Inspect the Release result
        Console.WriteLine($"Failed count for Release: {releaseResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in releaseResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Release: {releaseResult.SucceededLockTokens.Count}");
        foreach (string lockToken in releaseResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    if (toAcknowledge.Count > 0)
    {
        AcknowledgeResult acknowledgeResult = await client.AcknowledgeAsync(toAcknowledge);
    
        // Inspect the Acknowledge result
        Console.WriteLine($"Failed count for Acknowledge: {acknowledgeResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in acknowledgeResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Acknowledge: {acknowledgeResult.SucceededLockTokens.Count}");
        foreach (string lockToken in acknowledgeResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    if (toReject.Count > 0)
    {
        RejectResult rejectResult = await client.RejectAsync(toReject);
    
        // Inspect the Reject result
        Console.WriteLine($"Failed count for Reject: {rejectResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in rejectResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Reject: {rejectResult.SucceededLockTokens.Count}");
        foreach (string lockToken in rejectResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    public class TestModel
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }    
    
    
  3. في نافذة مستكشف الحلول، انقر بزر الماوس الأيمن فوق مشروع EventReceiver، وحدد Set as Startup project.

  4. أنشئ المشروع، وتأكد من عدم وجود أخطاء.

  5. قم بتشغيل تطبيق EventReceiver وتأكيد مشاهدة الأحداث الثلاثة في نافذة الإخراج.

    لقطة شاشة تعرض الإخراج من تطبيق المتلقي.

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

انتقل إلى مساحة اسم Event Grid في مدخل Microsoft Azure، وحدد Delete على مدخل Microsoft Azure لحذف مساحة اسم Event Grid والموضوع فيها.

راجع مرجع .NET API.