تمرين: إرسال رسالة وتلقيها من قائمة انتظار ناقل خدمة Azure باستخدام .NET.

مكتمل

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

  • إنشاء مساحة اسم ناقل خدمة وقائمة انتظار باستخدام Azure CLI.
  • إنشاء تطبيق وحدة تحكم .NET لإرسال واستقبال الرسائل من قائمة الانتظار.

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

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

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

  1. إطلاق Azure Cloud Shell وتحديد Bash والبيئة.

  2. إنشاء المتغيرات المستخدمة في أوامر Azure CLI. استبدل <myLocation> بمنطقة قريبة منك.

    myLocation=<myLocation>
    myNameSpaceName=az204svcbus$RANDOM
    

إنشاء موارد Azure

  1. إنشاء مجموعة موارد للاحتفاظ بموارد Azure التي تقوم بإنشائها.

    az group create --name az204-svcbus-rg --location $myLocation
    
  2. إنشاء مساحة اسم مراسلة "ناقل خدمة Azure". ينشئ الأمر التالي مساحة اسم باستخدام المتغير الذي قمت بإنشائه سابقا. تستغرق العملية بضع دقائق حتى تكتمل.

    az servicebus namespace create \
        --resource-group az204-svcbus-rg \
        --name $myNameSpaceName \
        --location $myLocation
    
  3. إنشاء قائمة انتظار ناقل خدمة Microsoft Azure

    az servicebus queue create --resource-group az204-svcbus-rg \
        --namespace-name $myNameSpaceName \
        --name az204-queue
    

استرداد سلسلة الاتصال لمساحة اسم ناقل الخدمة

  1. افتح مدخل Azure وانتقل إلى مجموعة موارد az204-svcbus-rg.

  2. حدد مورد az204svcbus الذي أنشأته.

  3. حدد Shared access policies في قسم Settings، ثمّ حدد سياسة RootManageSharedAccessKey».

  4. انسخ سلسلة الاتصال الأساسي من مربع الحوار الذي يظهر واحفظه في ملف أو اترك المدخل مفتوحًا وانسخ المفتاح عند الحاجة.

أنشئ تطبيق وحدة التحكم لإرسال رسائل إلى قائمة الانتظار

  1. افتح محطة طرفية محلية وأنشئها، ثم غير إلى دليل اسمه az204svcbus ثم شغل الأمر لتشغيل التعليمات البرمجية لـ Visual Studio.

    code .
    
  2. افتح المحطة الطرفية في Visual Studio Code عن طريق تحديد Terminal New Terminal في شريط القوائم وقم بتشغيل الأوامر التالية لإنشاء تطبيق وحدة التحكم وإضافة حزمة Azure.Messaging.ServiceBus>.

    dotnet new console
    dotnet add package Azure.Messaging.ServiceBus
    
  3. في Program.cs، أضف العبارات التالية using في أعلى الملف بعد العبارة الحالية using.

    using Azure.Messaging.ServiceBus;
    
  4. أضف المتغيرات التالية إلى التعليمات البرمجية وقم بتعيين connectionString المتغير إلى سلسلة الاتصال التي حصلت عليها سابقا.

    // connection string to your Service Bus namespace
    string connectionString = "<CONNECTION STRING>";
    
    // name of your Service Bus topic
    string queueName = "az204-queue";
    
  5. أضف التعليمات البرمجية التالية أسفل المتغيرات التي أضفتها للتو. راجع تعليقات التعليمات البرمجية للحصول على التفاصيل.

    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the sender used to publish messages to the queue
    ServiceBusSender sender;
    
    // Create the clients that we'll use for sending and processing messages.
    client = new ServiceBusClient(connectionString);
    sender = client.CreateSender(queueName);
    
    // create a batch 
    using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
    
    for (int i = 1; i <= 3; i++)
    {
        // try adding a message to the batch
        if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}")))
        {
            // if an exception occurs
            throw new Exception($"Exception {i} has occurred.");
        }
    }
    
    try
    {
        // Use the producer client to send the batch of messages to the Service Bus queue
        await sender.SendMessagesAsync(messageBatch);
        Console.WriteLine($"A batch of three messages has been published to the queue.");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await sender.DisposeAsync();
        await client.DisposeAsync();
    }
    
    Console.WriteLine("Follow the directions in the exercise to review the results in the Azure portal.");
    Console.WriteLine("Press any key to continue");
    Console.ReadKey();
    
  6. احفظ الملف وشغل الأمر dotnet build للتأكد من عدم وجود أخطاء.

  7. قم بتشغيل البرنامج باستخدام dotnet run الأمر وانتظر رسالة التأكيد التالية. ثم اضغط على أي مفتاح للخروج من البرنامج.

    A batch of three messages has been published to the queue.
    

مراجعة النتائج

  1. سجل الدخول إلى مدخل Microsoft Azure وانتقل إلى مساحة اسم ناقل خدمة Microsoft Azure. حدد مستكشف ناقل خدمة Microsoft Azure في جزء التنقل في قائمة انتظار ناقل الخدمة.

  2. حدد نظرة خاطفة من البداية وتظهر الرسائل الثلاث التي تم إرسالها.

    Decorative.

حدث المشروع لتلقي الرسائل في قائمة الانتظار

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

  1. أضف التعليمات البرمجية التالية في نهاية التعليمات البرمجية الموجودة. راجع تعليقات التعليمات البرمجية للحصول على التفاصيل.

    ServiceBusProcessor processor;
    client = new ServiceBusClient(connectionString);
    
    // create a processor that we can use to process the messages
    processor = client.CreateProcessor(queueName, new ServiceBusProcessorOptions());
    
    try
    {
        // add handler to process messages
        processor.ProcessMessageAsync += MessageHandler;
    
        // add handler to process any errors
        processor.ProcessErrorAsync += ErrorHandler;
    
        // start processing 
        await processor.StartProcessingAsync();
    
        Console.WriteLine("Wait for a minute and then press any key to end the processing");
        Console.ReadKey();
    
        // stop processing 
        Console.WriteLine("\nStopping the receiver...");
        await processor.StopProcessingAsync();
        Console.WriteLine("Stopped receiving messages");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await processor.DisposeAsync();
        await client.DisposeAsync();
    }
    
    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body}");
    
        // complete the message. messages is deleted from the queue. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
  2. استخدم الأمر dotnet build للتأكد من عدم وجود أخطاء.

  3. dotnet run استخدم الأمر لتشغيل التطبيق. يرسل ثلاث رسائل أخرى إلى قائمة الانتظار ثم يسترد جميع الرسائل الست. قم بالضغط على أي مفتاح لإيقاف جهاز الاستقبال والتطبيق.

    Wait for a minute and then press any key to end the processing
    Received: Message 1
    Received: Message 2
    Received: Message 3
    Received: Message 1
    Received: Message 2
    Received: Message 3
    
    Stopping the receiver...
    Stopped receiving messages
    

    إشعار

    نظرا لأن التطبيق أرسل دفعتين من الرسائل قبل استردادها، يجب أن تشاهد دفعتين من ثلاث رسائل ممثلة في الإخراج.

  4. ارجع إلى المدخل وحدد Peek من البداية مرة أخرى. لاحظ أنه لا تظهر أي رسائل في قائمة الانتظار نظرا لأننا استردناها جميعا.

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

عندما لا تكون هناك حاجة للموارد، يمكنك استخدام الأمر az group delete في Azure Cloud Shell لإزالة مجموعة الموارد.

az group delete --name az204-svcbus-rg --no-wait