Упражнение. Отправка и получение сообщения из очереди служебной шины с помощью .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. Создайте пространство имен обмена сообщениями для служебной шины. Следующая команда создает пространство имен с помощью переменной, созданной ранее. Операция занимает несколько минут.

    az servicebus namespace create \
        --resource-group az204-svcbus-rg \
        --name $myNameSpaceName \
        --location $myLocation
    
  3. Создание очереди служебной шины

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

Получение строки подключения для пространства имен служебной шины

  1. Откройте портал Azure и перейдите в группу ресурсов az204-svcbus-rg.

  2. Выберите созданный ресурс az204svcbus.

  3. В разделе Параметры щелкните Политики общего доступа и выберите политику RootManageSharedAccessKey.

  4. Скопируйте основную строку подключения из открывшегося диалогового окна и сохраните ее в файл или оставьте портал открытым и скопируйте ключ при необходимости.

Создание консольного приложения для отправки сообщений в очередь

  1. Откройте локальный терминал, создайте и перейдите в каталог с именем az204svcbus, а затем выполните команду, чтобы запустить Visual Studio Code.

    code .
    
  2. Откройте терминал в Visual Studio Code, выбрав терминал > "Новый терминал " в строке меню и выполните следующие команды, чтобы создать консольное приложение и добавить пакет 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. Войдите в портал Azure и перейдите к пространству имен служебная шина.

  2. Выберите очереди из раздела "Сущности" области навигации, а затем выберите az204-queue из списка.

  3. Выберите обозреватель служебная шина в области навигации служебная шина очереди.

  4. Выберите "Просмотреть" в начале , а отобразились три сообщения.

    Декоративный.

Обновление проекта для получения сообщений в очередь

В этом разделе вы обновите программу для получения сообщений из очереди.

  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. Вернитесь на портал и снова нажмите кнопку "Просмотреть". Обратите внимание, что сообщения не отображаются в очереди, так как мы получили их все.

Очистка ресурсов

Если ресурсы больше не нужны, можно использовать команду az group delete в Azure Cloud Shell, чтобы удалить группу ресурсов.

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