Краткое руководство. Создание очереди служебной шины с помощью портала AzureQuickstart: Use Azure portal to create a Service Bus queue

В этом кратком руководстве объясняется, как отправлять и получать сообщения через очередь служебной шины, создав с помощью портала Azure пространство имен для обмена сообщениями и очередь в этом пространстве имен, а также как получить учетные данные для авторизации в этом пространстве имен.This quickstart describes how to send and receive messages to and from a Service Bus queue, using the Azure portal to create a messaging namespace and a queue within that namespace, and to obtain the authorization credentials on that namespace. Далее в этой процедуре демонстрируется отправка и получение сообщений через созданную очередь с применением библиотеки .NET Standard.The procedure then shows how to send and receive messages from this queue using the .NET Standard library.

Что такое очереди служебной шины?What are Service Bus queues?

Очереди служебной шины поддерживают модель обмена сообщениями через посредника .Service Bus queues support a brokered messaging communication model. При использовании очередей компоненты распределенного приложения не взаимодействуют между собой напрямую, а обмениваются сообщениями через очередь, которая выступает в качестве посредника.When using queues, components of a distributed application do not communicate directly with each other; instead they exchange messages via a queue, which acts as an intermediary (broker). Производитель (отправитель) передает сообщение в очередь, а затем продолжает его обработку.A message producer (sender) hands off a message to the queue and then continues its processing. Потребитель сообщения (получатель) асинхронно извлекает сообщение из очереди и обрабатывает его.Asynchronously, a message consumer (receiver) pulls the message from the queue and processes it. Поставщику не нужно ждать ответа от потребителя, чтобы продолжить обработку и отправку дальнейших сообщений.The producer does not have to wait for a reply from the consumer in order to continue to process and send further messages. Очереди предлагают доставку сообщений конкурирующим потребителям по типу FIFO (первым пришел, первым вышел).Queues offer First In, First Out (FIFO) message delivery to one or more competing consumers. То есть обычно получатели принимают и обрабатывают сообщения в том порядке, в котором они были добавлены в очередь, и каждое сообщение принимается и обрабатывается только одним потребителем сообщений.That is, messages are typically received and processed by the receivers in the order in which they were added to the queue, and each message is received and processed by only one message consumer.

QueueConcepts

Очереди служебной шины — это технология общего назначения, которая может использоваться для разнообразных сценариев:Service Bus queues are a general-purpose technology that can be used for a wide variety of scenarios:

  • Взаимодействие между веб-ролями и рабочими ролями в многоуровневом приложении Azure.Communication between web and worker roles in a multi-tier Azure application.
  • Обмен данными между локальными приложениями и приложениями, размещенными в Azure, в гибридном решении.Communication between on-premises apps and Azure-hosted apps in a hybrid solution.
  • Связь между компонентами распределенного приложения, которое работает в другой организации или в другом подразделении данной организации.Communication between components of a distributed application running on-premises in different organizations or departments of an organization.

С помощью очередей можно лучше масштабировать приложения и сделать архитектуру более устойчивой.Using queues enables you to scale your applications more easily, and enable more resiliency to your architecture.

Предварительные требованияPrerequisites

Для работы с этим руководством вам потребуются:To complete this tutorial, make sure you have installed:

Создание пространства имен на портале AzureCreate a namespace in the Azure portal

Чтобы приступить к использованию сущностей обмена сообщениями в служебной шине в Azure, сначала необходимо создать пространство имен с уникальным для Azure именем.To begin using Service Bus messaging entities in Azure, you must first create a namespace with a name that is unique across Azure. Пространство имен предоставляет контейнер для адресации ресурсов служебной шины в вашем приложении.A namespace provides a scoping container for addressing Service Bus resources within your application.

Создание пространства имен службы:To create a namespace:

  1. Войдите на портал AzureSign in to the Azure portal

  2. На портале на панели навигации слева выберите + Создать ресурс, Интеграция, а затем — Служебная шина.In the left navigation pane of the portal, select + Create a resource, select Integration, and then select Service Bus.

    Создать ресурс -> Интеграция -> Служебная шина Azure

  3. В диалоговом окне Создание пространства имен выполните следующие действия:In the Create namespace dialog, do the following steps:

    1. Введите имя для пространства имен.Enter a name for the namespace. Система немедленно проверяет, доступно ли оно.The system immediately checks to see if the name is available. Список правил для именования пространств имен см. в статье об API REST для создания пространства имен.For a list of rules for naming namespaces, see Create Namespace REST API.

    2. Выберите ценовую категорию ("Базовый", "Стандартный" или "Премиум") для пространства имен.Select the pricing tier (Basic, Standard, or Premium) for the namespace. Чтобы использовать разделы и подписки, выберите категорию "Стандартный" или "Премиум".If you want to use topics and subscriptions, choose either Standard or Premium. Разделы и подписки не поддерживаются в ценовой категории "Базовый".Topics/subscriptions are not supported in the Basic pricing tier.

    3. Если вы выбрали ценовую категорию Премиум, выполните следующие действия:If you selected the Premium pricing tier, follow these steps:

      1. Укажите число единиц обмена сообщениями.Specify the number of messaging units. В категории "Премиум" обеспечивается изоляция ресурсов на уровне ЦП и памяти, так что рабочая нагрузка выполняется изолированно от других.The premium tier provides resource isolation at the CPU and memory level so that each workload runs in isolation. Контейнер ресурса называется единицей обмена сообщениями.This resource container is called a messaging unit. Пространству имен ценовой категории "Премиум" выделяется по крайней мере одна единица обмена сообщениями.A premium namespace has at least one messaging unit. Для каждого пространства имен служебной шины Premium можно выбрать 1, 2 или 4 единицы обмена сообщениями.You can select 1, 2, or 4 messaging units for each Service Bus Premium namespace. Дополнительные сведения см. в статье Уровни обмена сообщениями через служебную шину Premium и Standard.For more information, see Service Bus Premium Messaging.
      2. Укажите, хотите ли вы сделать пространство имен избыточным в пределах зоны.Specify whether you want to make the namespace zone redundant. Избыточность в пределах зоны обеспечивает улучшенную доступность за счет распределения реплик по зонам доступности внутри одного региона без дополнительной платы.The zone redundancy provides enhanced availability by spreading replicas across availability zones within one region at no additional cost. Дополнительные сведения см. в статье о зонах доступности в Azure.For more information, see Availability zones in Azure.
    4. Выберите подписку Azure, в которой будет создано пространство имен.For Subscription, choose an Azure subscription in which to create the namespace.

    5. Выберите существующую группу ресурсов, в которую будет включено это пространство имен, или создайте новую.For Resource group, choose an existing resource group in which the namespace will live, or create a new one.

    6. Укажите расположение — регион для размещения пространства имен.For Location, choose the region in which your namespace should be hosted.

    7. Нажмите кнопку Создать.Select Create. Теперь система создает пространство имен и включает его.The system now creates your namespace and enables it. Возможно, вам придется подождать несколько минут, пока система выделит ресурсы для вашей учетной записи.You might have to wait several minutes as the system provisions resources for your account.

      Создание пространства имен

  4. Убедитесь, что пространство имен служебной шины успешно развернуто.Confirm that the service bus namespace is deployed successfully. Чтобы просмотреть уведомления, выберите значок колокольчика ("Оповещения") на панели инструментов.To see the notifications, select the bell icon (Alerts) on the toolbar. Выберите имя группы ресурсов в уведомлении, как показано на рисунке.Select the name of the resource group in the notification as shown in the image. Отобразится группа ресурсов, которая содержит пространство имен служебной шины.You see the resource group that contains the service bus namespace.

    Оповещение о развертывании

  5. На странице своей группы ресурсов выберите пространство имен служебной шины.On the Resource group page for your resource group, select your service bus namespace.

    Страница "Группа ресурсов" — выбор пространства имен служебной шины

  6. Вы увидите домашнюю страницу пространства имен служебной шины.You see the home page for your service bus namespace.

    Домашняя страница пространства имен служебной шины

Получение строки подключенияGet the connection string

При создании нового пространства имен автоматически создается начальное правило подписанного URL-адреса (SAS) и связанная с ним пара первичного и вторичного ключей, каждый из которых предоставляет полный контроль над всеми аспектами пространства имен.Creating a new namespace automatically generates an initial Shared Access Signature (SAS) rule with an associated pair of primary and secondary keys that each grant full control over all aspects of the namespace. Сведения о том, как в дальнейшем создавать правила с ограниченными правами для постоянных отправителей и получателей, см. в статье Аутентификация и авторизация в служебной шине.See Service Bus authentication and authorization for information about how to create rules with more constrained rights for regular senders and receivers. Чтобы скопировать первичный и вторичный ключи для пространства имен, выполните следующие действия:To copy the primary and secondary keys for your namespace, follow these steps:

  1. Щелкните Все ресурсы, а затем щелкните созданное имя пространства имен.Click All resources, then click the newly created namespace name.

  2. В окне пространства имен щелкните Политики общего доступа.In the namespace window, click Shared access policies.

  3. В окне Политики общего доступа щелкните RootManageSharedAccessKey.In the Shared access policies screen, click RootManageSharedAccessKey.

    Сведения о подключении

  4. В окне Policy: RootManageSharedAccessKey (Политика: RootManageSharedAccessKey) нажмите кнопку "Копировать" рядом с полем Первичная строка подключения, чтобы скопировать строку подключения в буфер обмена для последующего использования.In the Policy: RootManageSharedAccessKey window, click the copy button next to Primary Connection String, to copy the connection string to your clipboard for later use. Вставьте на время эти значения в Блокноте или любом другом месте.Paste this value into Notepad or some other temporary location.

    Строка подключения

  5. Повторите предыдущий шаг, скопировав и вставив значение первичного ключа во временное расположение для последующего использования.Repeat the previous step, copying and pasting the value of Primary key to a temporary location for later use.

Создание очереди на портале AzureCreate a queue in the Azure portal

  1. На странице Пространство имен служебной шины в меню навигации слева выберите Очереди.On the Service Bus Namespace page, select Queues in the left navigational menu.

  2. На странице Очереди на панели инструментов выберите + Очередь.On the Queues page, select + Queue on the toolbar.

  3. Введите имя очереди, остальные значения по умолчанию не изменяйте.Enter a name for the queue, and leave the other values with their defaults.

  4. Выберите Создать.Now, select Create.

    Очереди -> + Очередь -> Введите имя -> Создать

Отправка и получение сообщенийSend and receive messages

Примечание

В этом разделе для отправки и получения сообщений используется пример .NET.The sample used in this section to send and receive messages is a .NET sample. Примеры отправки и получения сообщений с использованием других языков программирования см. в этой статье.For samples to send/receive messages using other programming languages, see Service Bus samples.

Пошаговые инструкции по отправке и приему сообщений с использованием различных языков программирования см. в следующих кратких руководствах:For step-by-step instructions for sending/receiving messages using various programming languages, see the following quick starts:

Подготовив пространство имен и очередь и получив необходимые учетные данные, вы можете приступать к отправке и получению сообщений.After the namespace and queue are provisioned, and you have the necessary credentials, you are ready to send and receive messages. Этот код можно изучить в папке с примером на GitHub.You can examine the code in this GitHub sample folder.

Чтобы выполнить этот код, сделайте следующее:To run the code, do the following:

  1. Выполните следующую команду, которая клонирует репозиторий GitHub для служебной шины:Clone the Service Bus GitHub repository by issuing the following command:

    git clone https://github.com/Azure/azure-service-bus.git
    
  2. Перейдите к папке azure-service-bus\samples\DotNet\GettingStarted\BasicSendReceiveQuickStart\BasicSendReceiveQuickStart с примерами.Navigate to the sample folder azure-service-bus\samples\DotNet\GettingStarted\BasicSendReceiveQuickStart\BasicSendReceiveQuickStart.

  3. Скопируйте строку подключения и имя очереди, которые вы получили в разделе "Получение учетных данных управления".Copy the connection string and queue name you obtained in the Obtain the management credentials section.

  4. В командной строке введите следующую команду:At a command prompt, type the following command:

    dotnet build
    
  5. Перейдите в папку bin\Debug\netcoreapp2.0.Navigate to the bin\Debug\netcoreapp2.0 folder.

  6. Введите приведенную ниже команду, чтобы запустить программу.Type the following command to run the program. Не забудьте ввести вместо myConnectionString значение, которое вы получили ранее, а вместо myQueueName — имя созданной очереди:Be sure to replace myConnectionString with the value you previously obtained, and myQueueName with the name of the queue you created:

    dotnet BasicSendReceiveQuickStart.dll -ConnectionString "myConnectionString" -QueueName "myQueueName"
    
  7. Проследите, как в очередь отправляются 10 сообщений, а затем поступают из нее:Observe 10 messages being sent to the queue, and subsequently received from the queue:

    Выходные данные программы

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

С помощью портала можно удалить группу ресурсов, пространство имен и очередь.You can use the portal to remove the resource group, namespace, and queue.

Разбор примера кодаUnderstand the sample code

Этот раздел содержит дополнительные сведения о работе этого примера кода.This section contains more details about what the sample code does.

Получение строки подключения и очередиGet connection string and queue

Строка подключения и имя очереди передаются в метод Main() в качестве аргументов командной строки.The connection string and queue name are passed to the Main() method as command-line arguments. Main() объявляет две строковые переменные для хранения этих значений:Main() declares two string variables to hold these values:

static void Main(string[] args)
{
    string ServiceBusConnectionString = "";
    string QueueName = "";

    for (int i = 0; i < args.Length; i++)
    {
        var p = new Program();
        if (args[i] == "-ConnectionString")
        {
            Console.WriteLine($"ConnectionString: {args[i+1]}");
            ServiceBusConnectionString = args[i + 1]; 
        }
        else if(args[i] == "-QueueName")
        {
            Console.WriteLine($"QueueName: {args[i+1]}");
            QueueName = args[i + 1];
        }                
    }

    if (ServiceBusConnectionString != "" && QueueName != "")
        MainAsync(ServiceBusConnectionString, QueueName).GetAwaiter().GetResult();
    else
    {
        Console.WriteLine("Specify -Connectionstring and -QueueName to execute the example.");
        Console.ReadKey();
    }                            
}

Затем метод Main() запускает асинхронный цикл обработки сообщений MainAsync().The Main() method then starts the asynchronous message loop, MainAsync().

Цикл обработки сообщенийMessage loop

Метод MainAsync() создает клиент очереди, используя аргументы командной строки, затем вызывает обработчик получения сообщений с именем RegisterOnMessageHandlerAndReceiveMessages() и отправляет набор сообщений.The MainAsync() method creates a queue client with the command-line arguments, calls a receiving message handler named RegisterOnMessageHandlerAndReceiveMessages(), and sends the set of messages:

static async Task MainAsync(string ServiceBusConnectionString, string QueueName)
{
    const int numberOfMessages = 10;
    queueClient = new QueueClient(ServiceBusConnectionString, QueueName);

    Console.WriteLine("======================================================");
    Console.WriteLine("Press any key to exit after receiving all the messages.");
    Console.WriteLine("======================================================");

    // Register QueueClient's MessageHandler and receive messages in a loop
    RegisterOnMessageHandlerAndReceiveMessages();

    // Send Messages
    await SendMessagesAsync(numberOfMessages);

    Console.ReadKey();

    await queueClient.CloseAsync();
}

Метод RegisterOnMessageHandlerAndReceiveMessages() просто настраивает несколько параметров для обработчика событий и вызывает метод RegisterMessageHandler() клиента, который начинает прием сообщений:The RegisterOnMessageHandlerAndReceiveMessages() method simply sets a few message handler options, then calls the queue client's RegisterMessageHandler() method, which starts the receiving:

static void RegisterOnMessageHandlerAndReceiveMessages()
{
    // Configure the MessageHandler Options in terms of exception handling, number of concurrent messages to deliver etc.
    var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
    {
        // Maximum number of Concurrent calls to the callback `ProcessMessagesAsync`, set to 1 for simplicity.
        // Set it according to how many messages the application wants to process in parallel.
        MaxConcurrentCalls = 1,

        // Indicates whether MessagePump should automatically complete the messages after returning from User Callback.
        // False below indicates the Complete will be handled by the User Callback as in `ProcessMessagesAsync` below.
        AutoComplete = false
    };

    // Register the function that will process messages
    queueClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
} 

Отправка сообщенийSend messages

Операции создания и отправки сообщений выполняются в методе SendMessagesAsync():The message creation and send operations occur in the SendMessagesAsync() method:

static async Task SendMessagesAsync(int numberOfMessagesToSend)
{
    try
    {
        for (var i = 0; i < numberOfMessagesToSend; i++)
        {
            // Create a new message to send to the queue
            string messageBody = $"Message {i}";
            var message = new Message(Encoding.UTF8.GetBytes(messageBody));

            // Write the body of the message to the console
            Console.WriteLine($"Sending message: {messageBody}");

            // Send the message to the queue
            await queueClient.SendAsync(message);
        }
    }
    catch (Exception exception)
    {
        Console.WriteLine($"{DateTime.Now} :: Exception: {exception.Message}");
    }
}

Обработка сообщенийProcess messages

Метод ProcessMessagesAsync() обнаруживает новые сообщения, обрабатывает их и завершает их прием:The ProcessMessagesAsync() method acknowledges, processes, and completes the receipt of the messages:

static async Task ProcessMessagesAsync(Message message, CancellationToken token)
{
    // Process the message
    Console.WriteLine($"Received message: SequenceNumber:{message.SystemProperties.SequenceNumber} Body:{Encoding.UTF8.GetString(message.Body)}");

    // Complete the message so that it is not received again.
    await queueClient.CompleteAsync(message.SystemProperties.LockToken);
}

Примечание

Вы можете управлять ресурсами служебной шины с помощью обозревателя служебной шины.You can manage Service Bus resources with Service Bus Explorer. Обозреватель служебной шины позволяет без труда подключаться к пространству имен служебной шины и управлять сущностями обмена сообщениями.The Service Bus Explorer allows users to connect to a Service Bus namespace and administer messaging entities in an easy manner. Средство предоставляет дополнительные возможности, например функции импорта и экспорта или возможность проверять разделы, очереди, подписки, службы ретрансляции, центры уведомлений и концентраторы событий.The tool provides advanced features like import/export functionality or the ability to test topic, queues, subscriptions, relay services, notification hubs and events hubs.

Дополнительная информацияNext steps

С помощью этой статьи вы создали пространство имен служебной шины и другие ресурсы, необходимые для отправки и получения сообщений через очередь.In this article, you created a Service Bus namespace and other resources required to send and receive messages from a queue. См. подробнее о создании кода для отправки и получения сообщений.To learn more about writing code to send and receive messages, continue to the tutorials in the Send and receive messages section.