Упражнение. Отправка и получение сообщения из очереди служебной шины с помощью .NET.
В этом упражнении вы узнаете, как:
- Создавать пространство имен служебной шины и очередь с помощью Azure CLI.
- Создайте консольное приложение .NET для отправки и получения сообщений из очереди.
Необходимые компоненты
- Учетная запись Azure с активной подпиской. Если у вас еще нет подписки, зарегистрируйтесь для получения бесплатной пробной версии по адресу https://azure.com/free .
- Visual Studio Code на одной из поддерживаемых платформ.
- Расширение C# для Visual Studio Code.
- .NET 8 — это целевая платформа для упражнения.
Вход в Azure
В этом разделе вы открываете терминал и создаете некоторые переменные, используемые в остальной части упражнения, чтобы сделать запись команды и создать уникальное имя ресурса, немного проще.
Запустите Azure Cloud Shell и выберите Bash и среду.
Создайте переменные, используемые в командах Azure CLI. Замените
<myLocation>
на ближайший к вам регион.myLocation=<myLocation> myNameSpaceName=az204svcbus$RANDOM
Создание ресурсов Azure
Создайте группу ресурсов для хранения создаваемых ресурсов Azure.
az group create --name az204-svcbus-rg --location $myLocation
Создайте пространство имен обмена сообщениями для служебной шины. Следующая команда создает пространство имен с помощью переменной, созданной ранее. Операция занимает несколько минут.
az servicebus namespace create \ --resource-group az204-svcbus-rg \ --name $myNameSpaceName \ --location $myLocation
Создание очереди служебной шины
az servicebus queue create --resource-group az204-svcbus-rg \ --namespace-name $myNameSpaceName \ --name az204-queue
Получение строки подключения для пространства имен служебной шины
Откройте портал Azure и перейдите в группу ресурсов az204-svcbus-rg.
Выберите созданный ресурс az204svcbus.
В разделе Параметры щелкните Политики общего доступа и выберите политику RootManageSharedAccessKey.
Скопируйте основную строку подключения из открывшегося диалогового окна и сохраните ее в файл или оставьте портал открытым и скопируйте ключ при необходимости.
Создание консольного приложения для отправки сообщений в очередь
Откройте локальный терминал, создайте и перейдите в каталог с именем az204svcbus, а затем выполните команду, чтобы запустить Visual Studio Code.
code .
Откройте терминал в Visual Studio Code, выбрав терминал > "Новый терминал " в строке меню и выполните следующие команды, чтобы создать консольное приложение и добавить пакет Azure.Messaging.ServiceBus .
dotnet new console dotnet add package Azure.Messaging.ServiceBus
В Program.cs добавьте следующие операторы
using
вверху файла после текущего оператораusing
.using Azure.Messaging.ServiceBus;
Добавьте в код следующие переменные и задайте
connectionString
переменную строка подключения, полученной ранее.// connection string to your Service Bus namespace string connectionString = "<CONNECTION STRING>"; // name of your Service Bus topic string queueName = "az204-queue";
Добавьте приведенный ниже код под только что добавленными переменными. Дополнительные сведения см. в комментариях к коду.
// 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();
Сохраните файл и выполните команду
dotnet build
, чтобы убедиться в отсутствии ошибок.Запустите программу с помощью
dotnet run
команды и дождитесь следующего сообщения подтверждения. Затем нажмите любой ключ, чтобы выйти из программы.A batch of three messages has been published to the queue.
Просмотр результатов
Войдите в портал Azure и перейдите к пространству имен служебная шина.
Выберите очереди из раздела "Сущности" области навигации, а затем выберите az204-queue из списка.
Выберите обозреватель служебная шина в области навигации служебная шина очереди.
Выберите "Просмотреть" в начале , а отобразились три сообщения.
Обновление проекта для получения сообщений в очередь
В этом разделе вы обновите программу для получения сообщений из очереди.
Добавьте следующий код в конце существующего кода. Дополнительные сведения см. в комментариях к коду.
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; }
Используйте команду
dotnet build
, чтобы убедиться в отсутствии ошибок.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
Примечание.
Так как приложение отправило два пакета сообщений перед их получением, вы увидите два пакета из трех сообщений, представленных в выходных данных.
Вернитесь на портал и снова нажмите кнопку "Просмотреть". Обратите внимание, что сообщения не отображаются в очереди, так как мы получили их все.
Очистка ресурсов
Если ресурсы больше не нужны, можно использовать команду az group delete
в Azure Cloud Shell, чтобы удалить группу ресурсов.
az group delete --name az204-svcbus-rg --no-wait