Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве показано, как отправлять сообщения в раздел Служебной шины и получать сообщения о подписке на этот раздел с помощью библиотеки .NET для Azure.Messaging.ServiceBus.
В этом быстром старте вы выполните следующие действия:
- Создание пространства имен служебной шины с помощью портала Azure.
- Создание раздела служебной шины с помощью портала Azure.
- Создайте подписку на эту тему в служебной шине с помощью портала Azure.
- Напишите консольное приложение .NET для отправки набора сообщений в раздел.
- Напишите консольное приложение .NET для получения этих сообщений из подписки.
Примечание.
Это краткое руководство содержит пошаговые инструкции по реализации простого сценария отправки пакета сообщений в тему служебной шины и получения этих сообщений из подписки на эту тему. Более сложные и другие примеры см. в разделе образцов Служебной шины для .NET на GitHub.
- В этом кратком руководстве показано два способа подключения к Служебной шине Azure: строка подключения и безпарольного метода. Первый вариант показывает, как использовать строку подключения для подключения к пространству имен Service Bus. Второй вариант показывает, как использовать объект безопасности в Microsoft Entra ID и управление доступом на основе ролей (RBAC) для подключения к пространству имен Служебной шины. Вам не нужно беспокоиться о наличии жестко закодированной строки подключения в коде, в файле конфигурации или в безопасном хранилище, таких как Azure Key Vault. Если вы не знакомы с Azure, вам может быть проще работать с вариантом строки подключения. Мы рекомендуем использовать параметр без пароля в реальных приложениях и рабочих средах. Дополнительные сведения см. в разделе "Проверка подлинности и авторизация".
Предварительные условия
Если вы новичок в этой службой, ознакомьтесь с обзором службы шины прежде чем приступать к этому быстрому началу.
- Подписка Azure. Чтобы использовать службы Azure, включая Служебную шину Azure, вам потребуется подписка. Если у вас нет существующей учетной записи Azure, вы можете зарегистрироваться и получить бесплатную пробную версию.
-
Visual Studio 2022 или более поздней версии. Пример приложения использует новые функции, представленные в C# 10. Вы по-прежнему можете использовать клиентскую библиотеку Service Bus с предыдущими версиями языка C#, но синтаксис может отличаться. Чтобы использовать последний синтаксис, рекомендуется установить .NET 6.0 или более позднюю версию и установить версию языка на
latest. Если вы используете Visual Studio, версии до Visual Studio 2022 несовместимы с инструментами, необходимыми для сборки проектов C# 10.
Создание пространства имен на портале Azure
Чтобы начать использование сущностей обмена сообщениями служебной шины в Azure, создайте пространство имен с уникальным именем в Azure. Пространство имен предоставляет логический контейнер для ресурсов служебной шины, таких как очереди и топики, в вашем приложении.
Создать пространство имен:
Войдите на портал Azure.
Выберите всплывающее меню в левом верхнем углу и перейдите на страницу "Все службы".
На панели навигации слева выберите "Интеграция".
Прокрутите вниз до служб обмена сообщениями, наведите указатель мыши на служебную шину и нажмите кнопку "Создать".
На вкладке "Основы" страницы"Создание пространства имен " выполните следующие действия:
Выберите подписку Azure, в которой будет создано пространство имен.
Для группы ресурсов выберите существующую группу ресурсов или создайте новую.
Введите имя пространства имен, соответствующее указанным соглашениям об именовании.
- Это имя должно быть уникальным в пределах Azure. Система немедленно проверяет, доступно ли имя.
- Длина имени составляет не менее 6 и не более 50 символов.
- Имя может содержать только буквы, цифры и дефисы
-. - Имя должно начинаться с буквы и заканчиваться буквой или цифрой.
- Имя не заканчивается на
-sbили-mgmt.
Для расположения выберите регион для размещения пространства имен.
Для параметра Ценовая категория выберите ценовую категорию ("Базовый", "Стандартный" или "Премиум") для пространства имен. Для этого быстрого начала выберите Стандартный.
Если выбрать уровень "Премиум" , можно включить георепликацию для пространства имен. Функция георепликации гарантирует, что метаданные и данные пространства имен постоянно реплицируются из основного региона в один или несколько дополнительных регионов.
Внимание
Чтобы использовать разделы и подписки, выберите категорию "Стандартный" или "Премиум". Ценовая категория "Базовый" не поддерживает разделы и подписки.
Если выбрана ценовая категория Премиум, укажите число единиц обмена сообщениями. В категории "Премиум" обеспечивается изоляция ресурсов на уровне ЦП и памяти, так что рабочая нагрузка выполняется изолированно от других. Этот контейнер ресурсов называется как единица обмена сообщениями. Пространству имен ценовой категории "Премиум" выделяется по крайней мере одна единица обмена сообщениями. Вы можете выбрать 1, 2, 4, 8 или 16 единиц обмена сообщениями для каждого пространства имен служебной шины Premium. Дополнительные сведения см. на уровне обмена сообщениями служебной шины уровня "Премиум".
Нажмите Review + create внизу страницы.
На странице "Просмотр и создание " просмотрите параметры и нажмите кнопку "Создать".
После успешного развертывания ресурса выберите "Перейти к ресурсу " на странице развертывания.
Вы увидите главную страницу пространства имен сервисной шины.
Создание раздела с помощью портала Azure
На странице пространства имен Service Bus разверните сущности в меню навигации слева и выберите топики в левом меню.
На панели инструментов выберите + Раздел.
Введите имя для темы. Для других параметров оставьте значения по умолчанию.
Нажмите кнопку создания.
Создание подписки на раздел
Выберите раздел, который был создан в предыдущем разделе.
На странице Тема очереди Service Bus выберите + Подписка на панели инструментов.
На странице Создать подписку выполните следующие действия:
Введите S1 как имя подписки.
Выберите Создать, чтобы создать подписку.
Проверка подлинности приложения в Azure
В этой статье показаны два способа подключения к служебной шине Azure: беспарольное подключение и строка подключения.
Первый вариант показывает, как использовать учетные данные безопасности в Microsoft Entra ID и ролевое управление доступом (RBAC) для подключения к пространству имен Service Bus. Вам не нужно беспокоиться о наличии жестко закодированной строки подключения в коде, в файле конфигурации или в безопасном хранилище, таком как Azure Key Vault.
Второй вариант показывает, как использовать строку подключения для подключения к пространству имен Service Bus. Если вы не знакомы с Azure, вам может быть проще работать с вариантом строки подключения. Мы рекомендуем использовать параметр без пароля в реальных приложениях и рабочих средах. Дополнительные сведения см. в разделе Проверка подлинности и авторизация Service Bus. Дополнительные сведения о проверке подлинности без пароля см. в статье "Проверка подлинности приложений .NET".
Назначение ролей пользователю Microsoft Entra
При локальной разработке убедитесь, что учетная запись пользователя, которая подключается к служебной шине Azure, имеет правильные разрешения. Для отправки и получения сообщений требуется роль владельца данных служебной шины Azure . Чтобы назначить себе эту роль, вам потребуется роль администратора доступа пользователей или другая роль, которая включает Microsoft.Authorization/roleAssignments/write действие.
Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Для получения дополнительных сведений о доступных областях для назначения ролей см. статью "Понимание областей применения в Azure RBAC".
В следующем примере назначается роль Azure Service Bus Data Owner вашей учетной записи пользователя, которая предоставляет полный доступ к ресурсам Azure Service Bus. В реальном сценарии следуйте принципу наименьших привилегий , чтобы предоставить пользователям только минимальные разрешения, необходимые для более безопасной рабочей среды.
Встроенные роли Azure для Azure Service Bus
Для служебной шины Azure управление пространствами имен и всеми связанными ресурсами через портал Azure и API управления ресурсами Azure уже защищено с помощью модели Azure RBAC. Azure предоставляет следующие встроенные роли Azure для авторизации доступа к пространству имен Service Bus:
- Владелец данных служебной шины Azure: обеспечивает доступ к пространству имен служебной шины и его сущностям, включая очереди, разделы, подписки и фильтры. Участник этой роли может отправлять и получать сообщения из очередей или тем/подписок.
-
Отправитель данных служебной шины Azure: используйте эту роль для предоставления доступа к пространству
sendимен служебной шины и его сущностям. -
Приемник данных служебной шины Azure. Используйте эту роль, чтобы предоставить
receiveдоступ к пространству имен служебной шины и его сущностям.
Если вы хотите создать пользовательскую роль, см. раздел «Права, необходимые для операций в сервисной шине».
Добавить пользователя Microsoft Entra в роль владельца Azure Служебная шина
Добавьте имя пользователя Microsoft Entra в роль Владелец данных службы Azure Service Bus на уровне пространства имён службы "Служебная шина". Эта конфигурация позволяет приложению, работающему в контексте учетной записи пользователя, отправлять сообщения в очередь или раздел. Он может получать сообщения из очереди или подписки раздела.
Внимание
В большинстве случаев для распространения назначения ролей в Azure требуется минута или две. В редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
Если страница пространства имен для службы Service Bus не открыта в портале Azure, найдите свое пространство имен с помощью поисковой строки или навигации слева.
На странице обзора выберите элемент управления доступом (IAM) в меню слева.
На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.
Выберите +Добавить из верхнего меню и добавьте назначение ролей.
Используйте поле поиска, чтобы отфильтровать результаты для отображения нужной роли. В этом примере найдите
Azure Service Bus Data Ownerи выберите соответствующий результат. Теперь щелкните Далее.В разделе Назначение доступа для выберите Пользователь, группа или служебный принципал и + Выбрать членов.
В диалоговом окне найдите свое имя пользователя Microsoft Entra (обычно это ваш адрес электронной почты user@domain), а затем выберите пункт Select в нижней части диалогового окна.
Нажмите кнопку Проверить и назначить, чтобы перейти на последнюю страницу, а затем еще раз Проверить и назначить, чтобы завершить процесс.
Запуск Visual Studio
Вы можете авторизовать доступ к пространству имен служебной шины, выполнив следующие действия.
Запустите Visual Studio. Если появится окно "Начало работы ", выберите " Продолжить без ссылки на код " в правой области.
Нажмите кнопку Войти в правом верхнем углу Visual Studio.
Войдите с помощью учетной записи Microsoft Entra, которой ранее была назначена роль.
Отправка сообщений в раздел
В этом разделе показано, как создать консольное приложение .NET для отправки сообщений в раздел служебная шина.
Примечание.
Это краткое руководство содержит пошаговые инструкции по реализации простого сценария отправки пакета сообщений в раздел служебная шина и получения этих сообщений из подписки раздела. Дополнительные примеры для других и более сложных сценариев см. в примерах Служебной шины для .NET на GitHub.
Создайте консольное приложение
- В Visual Studio выберите "Файл ->Создать ->Проект".
- В диалоговом окне Создать проект выполните следующие действия: (если это диалоговое окно не отображается, щелкните в меню пункт Файл, затем последовательно выберите Создать и Проект).
Выберите язык программирования C#.
Для типа приложения выберите значение Консоль.
Выберите консольное приложение из списка результатов.
Затем выберите Далее.
- Введите QueueSender в качестве имени проекта, ServiceBusQueueQuickStart в качестве имени решения, а затем нажмите Далее.
- На странице Дополнительная информация выберите Создать для создания решения и проекта.
Добавление пакетов NuGet в проект
Выберите в меню элементы Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
Выполните следующую команду, чтобы установить пакет NuGet Azure.Messaging.ServiceBus .
Install-Package Azure.Messaging.ServiceBusВыполните следующую команду, чтобы установить пакет NuGet Azure.Identity .
Install-Package Azure.Identity
Добавление кода для отправки сообщений в раздел
Замените содержимое Program.cs приведенным ниже кодом. Важные шаги описаны в этом разделе с дополнительными сведениями в комментариях кода.
-
Создает объект ServiceBusClient с помощью
DefaultAzureCredentialобъекта.DefaultAzureCredentialавтоматически обнаруживает и использует учетные данные вашей учетной записи входа в Visual Studio для аутентификации в Azure Service Bus. - Вызов метода CreateSender для объекта
ServiceBusClient. Это позволяет создать объект ServiceBusSender для указанного раздела Служебной шины. - Создает объект ServiceBusMessageBatch с помощью ServiceBusSender.CreateMessageBatchAsync.
- Добавление сообщений в пакет с помощью ServiceBusMessageBatch.TryAddMessage.
- Отправка пакета сообщений в раздел Служебной шины с помощью метода ServiceBusSender.SendMessagesAsync.
Внимание
Обновите значения заполнителей (
<NAMESPACE-NAME>и<TOPIC-NAME>) в фрагменте кода с именами вашего пространства имен Service Bus и топика.using System.Threading.Tasks; using Azure.Messaging.ServiceBus; using Azure.Identity; // 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 topic ServiceBusSender sender; // number of messages to be sent to the topic const int numOfMessages = 3; // The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. //TODO: Replace the "<NAMESPACE-NAME>" and "<TOPIC-NAME>" placeholders. client = new ServiceBusClient( "<NAMESPACE-NAME>.servicebus.windows.net", new DefaultAzureCredential()); sender = client.CreateSender("<TOPIC-NAME>"); // create a batch using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync(); for (int i = 1; i <= numOfMessages; i++) { // try adding a message to the batch if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}"))) { // if it is too large for the batch throw new Exception($"The message {i} is too large to fit in the batch."); } } try { // Use the producer client to send the batch of messages to the Service Bus topic await sender.SendMessagesAsync(messageBatch); Console.WriteLine($"A batch of {numOfMessages} messages has been published to the topic."); } 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("Press any key to end the application"); Console.ReadKey();-
Создает объект ServiceBusClient с помощью
Выполните сборку проекта и убедитесь, что она прошла без ошибок.
Выполните программу и дождитесь подтверждающего сообщения.
A batch of 3 messages has been published to the topicВнимание
В большинстве случаев для распространения назначения ролей в Azure требуется минута или две. В редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
На портале Azure выполните следующие действия:
Перейдите к пространству имен вашего Service Bus.
На странице Обзор, в нижней центральной области, перейдите на вкладку Темы и выберите тему Служебной шины. В приведенном ниже примере это
mytopic.
На странице темы служебной шины, на диаграмме Сообщения в нижней части раздела Метрики, видно, что для темы поступило три входящих сообщения. Если значение не отображается, подождите несколько минут и обновите страницу, чтобы увидеть обновленную диаграмму.
Выберите подписку в области снизу. В приведенном ниже примере это S1. На странице подписки на Служебную шину для параметра Количество активных сообщений отображается значение 3. В подписку поступили три сообщения, которые вы отправили в раздел, но получатель их еще не открыл.
Получение сообщений из подписки
В этом разделе описано, как создать консольное приложение .NET, которое получает сообщения из подписки в раздел служебная шина.
Примечание.
Это краткое руководство содержит пошаговые инструкции по реализации простого сценария отправки пакета сообщений в тему служебной шины и получения этих сообщений из подписки на эту тему. Более сложные и другие примеры см. в разделе образцов Служебной шины для .NET на GitHub.
Создание проекта для получателя
- В окне Обозревателя решений щелкните правой кнопкой мыши решение ServiceBusTopicQuickStart, выберите Добавить и выберите Новый проект.
- Выберите Консольное приложение и нажмите Далее.
- Введите SubscriptionReceiver в поле Имя проекта и нажмите кнопку Далее.
- На странице Дополнительные сведения выберите Создать.
- В окне Обозреватель решений щелкните правой кнопкой мыши SubscriptionReceiver и выберите Установить как запускаемый проект.
Добавление пакетов NuGet в проект
Выберите в меню элементы Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
Выберите SubscriptionReceiver в выпадающем списке Проект по умолчанию.
Выполните следующую команду, чтобы установить пакет NuGet Azure.Messaging.ServiceBus .
Install-Package Azure.Messaging.ServiceBusВыполните следующую команду, чтобы установить пакет NuGet Azure.Identity .
Install-Package Azure.Identity
Добавьте код для получения сообщений из подписки.
В этом разделе вы добавите код для получения сообщений из подписки.
Замените существующее содержимое
Program.csследующими свойствами и методами:using System.Threading.Tasks; using Azure.Messaging.ServiceBus; using Azure.Identity; // the client that owns the connection and can be used to create senders and receivers ServiceBusClient client; // the processor that reads and processes messages from the subscription ServiceBusProcessor processor; // handle received messages async Task MessageHandler(ProcessMessageEventArgs args) { string body = args.Message.Body.ToString(); Console.WriteLine($"Received: {body} from subscription."); // complete the message. messages is deleted from the subscription. await args.CompleteMessageAsync(args.Message); } // handle any errors when receiving messages Task ErrorHandler(ProcessErrorEventArgs args) { Console.WriteLine(args.Exception.ToString()); return Task.CompletedTask; }Добавьте следующий код в конец
Program.cs.-
Создает объект ServiceBusClient с помощью
DefaultAzureCredentialобъекта.DefaultAzureCredentialавтоматически обнаруживает и использует учетные данные вашей учетной записи входа в Visual Studio для аутентификации в Azure Service Bus. - Вызывает метод CreateProcessor на объекте
ServiceBusClient, чтобы создать объект ServiceBusProcessor для указанного топика Service Bus. - Указание обработчиков для событий ProcessMessageAsync и ProcessErrorAsync объекта
ServiceBusProcessor. - Запуск обработки сообщений путем вызова StartProcessingAsync для объекта
ServiceBusProcessor. - Вызов StopProcessingAsync для объекта
ServiceBusProcessorпри нажатии пользователем кнопки для завершения обработки.
Внимание
Обновите значения заполнителей (
<NAMESPACE-NAME>,<TOPIC-NAME>,<SUBSCRIPTION-NAME>) в фрагменте кода с именами пространства имен, темы и подписки в вашей Service Bus.Дополнительные сведения см. в комментариях, содержащихся в коде.
// The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // Create the clients that we'll use for sending and processing messages. // TODO: Replace the <NAMESPACE-NAME> placeholder client = new ServiceBusClient( "<NAMESPACE-NAME>.servicebus.windows.net", new DefaultAzureCredential()); // create a processor that we can use to process the messages // TODO: Replace the <TOPIC-NAME> and <SUBSCRIPTION-NAME> placeholders processor = client.CreateProcessor("<TOPIC-NAME>", "<SUBSCRIPTION-NAME>", 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(); }-
Создает объект ServiceBusClient с помощью
Вот как будет выглядеть файл
Program.cs:using System; using System.Threading.Tasks; using Azure.Messaging.ServiceBus; using Azure.Identity; // the client that owns the connection and can be used to create senders and receivers ServiceBusClient client; // the processor that reads and processes messages from the subscription ServiceBusProcessor processor; // handle received messages async Task MessageHandler(ProcessMessageEventArgs args) { string body = args.Message.Body.ToString(); Console.WriteLine($"Received: {body} from subscription."); // complete the message. messages is deleted from the subscription. await args.CompleteMessageAsync(args.Message); } // handle any errors when receiving messages Task ErrorHandler(ProcessErrorEventArgs args) { Console.WriteLine(args.Exception.ToString()); return Task.CompletedTask; } // The Service Bus client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when messages are being published or read // regularly. // // Create the clients that we'll use for sending and processing messages. // TODO: Replace the <NAMESPACE-NAME> placeholder client = new ServiceBusClient( "<NAMESPACE-NAME>.servicebus.windows.net", new DefaultAzureCredential()); // create a processor that we can use to process the messages // TODO: Replace the <TOPIC-NAME> and <SUBSCRIPTION-NAME> placeholders processor = client.CreateProcessor("<TOPIC-NAME>", "<SUBSCRIPTION-NAME>", 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(); }Выполните сборку проекта и убедитесь, что она прошла без ошибок.
Запустите приложение получателя. Вы должны увидеть полученные сообщения. Нажмите любую клавишу, чтобы остановить работу приемника и приложения.
Wait for a minute and then press any key to end the processing Received: Message 1 from subscription: S1 Received: Message 2 from subscription: S1 Received: Message 3 from subscription: S1 Stopping the receiver... Stopped receiving messagesСнова просмотрите сведения на портале.
На странице раздела Служебной шины на диаграмме Сообщения можно увидеть, что в раздел поступило три входящих и три исходящих сообщения. Если эти числа не отображаются, подождите несколько минут и обновите страницу, чтобы просмотреть обновленную диаграмму.
На странице подписки на Служебную шину для параметра Количество активных сообщений отображается нулевое значение. Это означает, что получатель получил сообщения из этой подписки и обработал их.
Связанный контент
Ознакомьтесь со следующими примерами и документацией: