Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Из этого краткого руководства вы узнаете, как отправлять события в концентратор событий, а затем получать эти события из концентратора событий с помощью библиотеки .NET Azure.Messaging.EventHubs .
Примечание.
Краткие руководства предназначены для быстрого освоения работы с сервисом. Если вы уже знакомы со службой, вы можете просмотреть примеры .NET для Центров событий в репозитории пакета SDK для .NET на GitHub: примеры центров событий на GitHub, примеры обработчика событий на GitHub.
Необходимые компоненты
Если вы не знакомы с Центры событий Azure, ознакомьтесь с обзором Центров событий, прежде чем перейти к этому краткому руководству.
Для работы с данным руководством необходимо следующее:
- Подписка Microsoft Azure. Чтобы использовать службы Azure, в том числе Центры событий Azure, потребуется действующая подписка. Если у вас нет существующей учетной записи Azure, вы можете зарегистрироваться и получить бесплатную пробную версию.
-
Microsoft Visual Studio 2022. Клиентская библиотека для Центров событий Azure использует новые возможности, реализованные в C# версии 8.0. Вы по-прежнему можете использовать библиотеку с предыдущими версиями языка C#, но новый синтаксис недоступен. Чтобы использовать полный синтаксис, рекомендуется выполнять компиляцию с помощью пакета SDK для .NET Core 3.0 или более поздней версии, а для языковой версии должно быть установлено значение
latest
. Если вы используете Visual Studio, версии до Visual Studio 2022 несовместимы с инструментами, необходимыми для сборки проектов C# 8.0. Visual Studio 2022, включая бесплатный выпуск Community, можно скачать здесь. - Создайте пространство имен Центров событий и концентратор событий. Первым шагом является использование портала Azure для создания пространства имен Центров событий и концентратора событий в этом пространстве имен. Затем получите учетные данные управления, необходимые приложению для взаимодействия с концентратором событий. Для получения информации о создании пространства имен и концентратора событий см. Краткое руководство: Создание концентратора событий с помощью портала Azure.
Проверка подлинности приложения в Azure
В этом кратком руководстве показано два способа подключения к Центру событий Azure.
- Без пароля (проверка подлинности Microsoft Entra)
- Строка подключения
Первый способ показывает, как использовать субъект безопасности в Azure Microsoft Entra ID и управление доступом на основе ролей (RBAC) для подключения к пространству имен Azure Event Hubs. Вам не нужно беспокоиться о жёстко закодированных строках подключения в коде, файле конфигурации или в безопасном хранилище, например, в Azure Key Vault.
Второй вариант показывает, как использовать строку подключения для подключения к пространству имен Hub событий. Если вы не знакомы с Azure, вы можете считать вариант со строкой подключения более простым для понимания. Мы рекомендуем использовать параметр без пароля в реальных приложениях и рабочих средах. Дополнительные сведения см. в разделе "Проверка подлинности и авторизация". Дополнительные сведения о проверке подлинности без пароля можно найти на странице обзора.
Назначение ролей пользователю Microsoft Entra
При локальной разработке убедитесь, что учетная запись пользователя, которая подключается к Центры событий Azure имеет правильные разрешения. Для отправки и получения сообщений вам потребуется роль владельца данных Azure Event Hubs. Чтобы назначить себе эту роль, вам потребуется роль администратора доступа пользователей или другая роль, которая включает Microsoft.Authorization/roleAssignments/write
действие. Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Дополнительные сведения о доступных границах назначения ролей см. на странице обзора границ.
В следующем примере вашей учетной записи пользователя назначается роль Azure Event Hubs Data Owner
, предоставляющая полный доступ к ресурсам Azure Event Hubs. В реальном сценарии следуйте принципу наименьших привилегий , чтобы предоставить пользователям только минимальные разрешения, необходимые для более безопасной рабочей среды.
Встроенные роли Azure для Центров событий Azure
Для Azure Event Hubs управление пространствами имен и всеми связанными ресурсами через портал Azure и API управления ресурсами Azure уже защищено с помощью модели Azure RBAC. Azure предоставляет следующие встроенные роли Azure для авторизации доступа к пространству имен Центров событий:
- Центры событий Azure владелец данных: включает доступ к пространству имен Центров событий и его сущностям (очереди, разделы, подписки и фильтры)
- Отправитель данных для Центров событий Azure: используйте эту роль для предоставления отправителю доступа к пространству имен Центров событий и его сущностям.
- Приёмник данных для Концентраторов событий Azure. Используйте эту роль, чтобы предоставить получателю доступ к пространству имён Концентраторов событий и этих объектов.
Если вы хотите создать пользовательскую роль, см. раздел "Права", необходимые для операций Центров событий.
Внимание
В большинстве случаев для распространения назначения ролей в Azure потребуется несколько минут. В редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
В портале Azure найдите пространство имен Центров событий с помощью основной строки поиска или навигации слева.
На странице обзора выберите элемент управления доступом (IAM) в меню слева.
На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.
Выберите + Добавить в верхнем меню, а затем выберите Добавить назначение роли в появившемся раскрывающемся меню.
Используйте поле поиска, чтобы отфильтровать результаты для отображения нужной роли. В этом примере найдите
Azure Event Hubs Data Owner
и выберите соответствующий результат. Теперь щелкните Далее.В разделе Назначение доступа для выберите Пользователь, группа или сервисный принципал, а затем выберите + Выбрать участников.
В диалоговом окне найдите имя пользователя Microsoft Entra (обычно это ваш адрес электронной почты user@domain), а затем выберите пункт Select в нижней части диалогового окна.
Нажмите кнопку Проверить и назначить, чтобы перейти на последнюю страницу, а затем еще раз Проверить и назначить, чтобы завершить процесс.
Запуск Visual Studio и вход в Azure
Вы можете авторизовать доступ к пространству имен служебной шины, выполнив следующие действия.
Запустите Visual Studio. Если появится окно "Начало работы ", выберите " Продолжить без ссылки на код " в правой области.
Нажмите кнопку Войти в правом верхнем углу Visual Studio.
Войдите с помощью учетной записи Microsoft Entra, которой ранее была назначена роль.
Отправка событий в концентратор событий
В этом разделе показано, как создать консольное приложение .NET Core для отправки событий в созданный концентратор событий.
Создание консольного приложение
Если у вас уже открыт Visual Studio 2022, выберите "Файл " в меню, выберите "Создать" и выберите "Проект". В противном случае запустите Visual Studio 2022 и выберите "Создать проект ", если появится всплывающее окно.
В диалоговом окне Создать проект выполните следующие действия: (если это диалоговое окно не отображается, щелкните в меню пункт Файл, затем последовательно выберите Создать и Проект).
Выберите язык программирования C#.
Для типа приложения выберите значение Консоль.
В списке результатов выберите Консольное приложение.
Затем выберите Далее.
Введите EventHubsSender для имени проекта, EventHubsQuickStart для имени решения и нажмите кнопку "Далее".
На странице Дополнительные сведения выберите Создать.
Добавление пакетов NuGet в проект
Выберите в меню элементы Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
Выполните следующие команды, чтобы установить пакеты Azure.Messaging.EventHubs и Azure.Identity NuGet. Нажмите клавишу ВВОД , чтобы выполнить вторую команду.
Install-Package Azure.Messaging.EventHubs Install-Package Azure.Identity
Написание кода для отправки событий в концентратор событий
Замените существующий
Program.cs
код в файле следующим примером кода. Затем, замените значения заполнителей<EVENT_HUB_NAMESPACE>
и<HUB_NAME>
для параметровEventHubProducerClient
именами области имен вашего пространства имен Event Hubs и концентратором события. Например,"spehubns0309.servicebus.windows.net"
и"spehub"
.Вот важные шаги из кода:
- Создает объект EventHubProducerClient с помощью пространства имен и имени концентратора событий.
- Вызывает метод CreateBatchAsync в объекте EventHubProducerClient для создания объекта EventDataBatch.
- Добавление событий в пакет с помощью метода EventDataBatch.TryAdd.
- Отправка пакета сообщений в концентратор событий с помощью метода EventHubProducerClient.SendAsync.
using Azure.Identity; using Azure.Messaging.EventHubs; using Azure.Messaging.EventHubs.Producer; using System.Text; // number of events to be sent to the event hub int numOfEvents = 3; // The Event Hubs client types are safe to cache and use as a singleton for the lifetime // of the application, which is best practice when events are being published or read regularly. // TODO: Replace the <EVENT_HUB_NAMESPACE> and <HUB_NAME> placeholder values EventHubProducerClient producerClient = new EventHubProducerClient( "<EVENT_HUB_NAMESPACE>.servicebus.windows.net", "<HUB_NAME>", new DefaultAzureCredential()); // Create a batch of events using EventDataBatch eventBatch = await producerClient.CreateBatchAsync(); for (int i = 1; i <= numOfEvents; i++) { if (!eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes($"Event {i}")))) { // if it is too large for the batch throw new Exception($"Event {i} is too large for the batch and cannot be sent."); } } try { // Use the producer client to send the batch of events to the event hub await producerClient.SendAsync(eventBatch); Console.WriteLine($"A batch of {numOfEvents} events has been published."); Console.ReadLine(); } finally { await producerClient.DisposeAsync(); }
Выполните сборку проекта и убедитесь, что она прошла без ошибок.
Выполните программу и дождитесь подтверждающего сообщения.
A batch of 3 events has been published.
Примечание.
Если при использовании проверки подлинности Microsoft Entra возникает ошибка "InvalidIssuer: недопустимый издатель токена", это может быть связано с тем, что используется неправильный идентификатор арендатора Microsoft Entra. В вашем коде замените "new DefaultAzureCredential()" на "new DefaultAzureCredential(new DefaultAzureCredentialOptions {TenantId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"})" для явного указания идентификатора клиента (Tenant ID) Microsoft Entra.
Внимание
Если вы используете проверку подлинности без пароля (управление доступом на основе ролей Microsoft Entra), выберите "Сервис", а затем выберите "Параметры". В окне "Параметры" разверните узел "Аутентификация служб Azure" и выберите пункт "Выбор учетной записи". Убедитесь, что вы используете учетную запись, добавленную в роль владельца данных Центров событий Azure в пространстве имен Центров событий.
На странице пространства имен Центров событий на портале Azure отображаются три входящих сообщения на диаграмме "Сообщения ". При необходимости обновите страницу, чтобы обновить диаграмму. На отображение полученных сообщений может уйти несколько секунд.
Примечание.
Полный исходный код с более подробными комментариями можно найти в этом файле в GitHub.
Получение событий из концентратора событий
В этом разделе показано, как создать консольное приложение .NET Core для получения событий из концентратора событий с помощью обработчика событий. Обработчик событий упрощает получение событий из центров событий.
Создание учетной записи хранилища Azure и контейнера BLOB
В рамках этого краткого руководства вы настроите Службу хранилища Azure в качестве хранилища контрольных точек. Выполните указанные ниже действия, чтобы создать учетную запись хранения Azure.
- Создайте учетную запись хранения Azure
- Создайте контейнер BLOB
- Аутентификация в контейнере BLOB-объектов с помощью Microsoft Entra ID (аутентификация без пароля) или строки подключения к пространству имен.
Следуйте этим рекомендациям при использовании хранилища Blob-объектов Azure в качестве контрольного хранилища.
- Используйте отдельный контейнер для каждой группы потребителей. Вы можете использовать одну и ту же учетную запись хранения, но использовать один контейнер для каждой группы.
- Не используйте контейнер для чего-либо другого и не используйте учетную запись хранения для чего-либо другого.
- Учетная запись хранения должна находиться в том же регионе, в который находится развернутое приложение. Если приложение находится в локальной среде, попробуйте выбрать ближайший регион.
На странице учетной записи хранения в портале Azure в разделе службы BLOB убедитесь, что следующие параметры отключены.
- Иерархическое пространство имен
- Обратимое удаление BLOB-объекта
- Управление версиями
Если вы выполняете разработку локально, убедитесь, что учетная запись пользователя, через которую осуществляется доступ к данным BLOB-объектов, имеет правильные разрешения. Вам потребуется участник данных BLOB-объектов хранилища для чтения и записи данных BLOB-объектов. Чтобы назначить себе эту роль, вам потребуется назначить роль администратора доступа пользователей или другую роль, включающую действие Microsoft.Authorization/roleAssignments/write . Роли Azure RBAC можно назначить пользователю с помощью портала Azure, Azure CLI или Azure PowerShell. Дополнительные сведения о доступных областях назначения ролей можно узнать на странице обзора области.
В этом сценарии вы предоставите разрешения вашей учетной записи пользователя, ограниченные учетной записью хранения, чтобы обеспечить соблюдение принципа минимальных привилегий. В рамках этой практики пользователям предоставляются только минимальные необходимые разрешения, что позволяет создавать более защищенные рабочие среды.
В следующем примере роль участника данных BLOB-объектов хранилища назначается учетной записи пользователя, которая предоставляет доступ как для чтения, так и записи к данным BLOB-объектов в вашей учетной записи хранения.
Внимание
В большинстве случаев для распространения назначения ролей в Azure потребуется минута или две, но в редких случаях может потребоваться до восьми минут. Если при первом запуске кода возникают ошибки аутентификации, подождите несколько минут и повторите попытку.
На портале Azure найдите свою учетную запись хранения, воспользовавшись основной панелью поиска или областью навигации слева.
На странице обзора учетной записи хранения выберите Контроль доступа (IAM) в меню слева.
На странице Контроль доступа (IAM) откройте вкладку Назначения ролей.
Выберите + Добавить в верхнем меню, а затем выберите Добавить назначение роли в появившемся раскрывающемся меню.
Используйте поле поиска, чтобы отфильтровать результаты для отображения нужной роли. В этом примере найдите участника хранения данных в формате Blob и выберите соответствующий результат, а затем нажмите кнопку Далее.
В разделе Назначение доступа для выберите Пользователь, группа или учетная запись службы, а затем выберите + Выберите участников.
В диалоговом окне найдите имя пользователя Microsoft Entra (обычно ваш user@domain адрес электронной почты), а затем выберите в нижней части диалогового окна.
Нажмите кнопку Проверить и назначить, чтобы перейти на последнюю страницу, а затем еще раз Проверить и назначить, чтобы завершить процесс.
Создание проекта для получателя
- В окне обозревателя решений щелкните правой кнопкой мыши решение EventHubQuickStart, выберите элемент Добавить и действие Создать проект.
- Выберите Консольное приложение и нажмите Далее.
- Введите строку EventHubsReceiver в качестве имени проекта и нажмите кнопку Создать.
- В окне Обозреватель решений щелкните правой кнопкой мыши EventHubsReceiver и выберите Назначить запускаемым проектом.
Добавление пакетов NuGet в проект
Выберите в меню элементы Инструменты>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.
В окне Консоль диспетчера пакетов для параметра Проект по умолчанию выберите EventHubsReceiver. В противном случае в раскрывающемся списке выберите EventHubsReceiver.
Выполните следующую команду, чтобы установить Azure.Messaging.EventHubs и пакеты NuGet Azure.Identity . Нажмите клавишу ВВОД , чтобы выполнить последнюю команду.
Install-Package Azure.Messaging.EventHubs Install-Package Azure.Messaging.EventHubs.Processor Install-Package Azure.Identity
Обновление кода
Замените содержимое файла Program.cs кодом, приведенным ниже.
Замените существующий
Program.cs
код в файле следующим примером кода. Затем замените заполнители<STORAGE_ACCOUNT_NAME>
и<BLOB_CONTAINER_NAME>
дляBlobContainerClient
URI. Замените также значения заполнителей<EVENT_HUB_NAMESPACE>
и<HUB_NAME>
дляEventProcessorClient
.Вот важные шаги из кода:
- Создает объект EventProcessorClient с помощью пространства имен Центров событий и имени концентратора событий. Необходимо создать объект BlobContainerClient для контейнера в хранилище Azure, созданном ранее.
- Указание обработчиков для событий ProcessEventAsync и ProcessErrorAsync объекта EventProcessorClient.
- Запуск обработки событий путем вызова StartProcessingAsync для объекта EventProcessorClient.
- Останавливает обработку событий через 30 секунд, вызвав StopProcessingAsync в объекте EventProcessorClient .
using Azure.Identity; using Azure.Messaging.EventHubs; using Azure.Messaging.EventHubs.Consumer; using Azure.Messaging.EventHubs.Processor; using Azure.Storage.Blobs; using System.Text; // Create a blob container client that the event processor will use // TODO: Replace <STORAGE_ACCOUNT_NAME> and <BLOB_CONTAINER_NAME> with actual names BlobContainerClient storageClient = new BlobContainerClient( new Uri("https://<STORAGE_ACCOUNT_NAME>.blob.core.windows.net/<BLOB_CONTAINER_NAME>"), new DefaultAzureCredential()); // Create an event processor client to process events in the event hub // TODO: Replace the <EVENT_HUBS_NAMESPACE> and <HUB_NAME> placeholder values var processor = new EventProcessorClient( storageClient, EventHubConsumerClient.DefaultConsumerGroupName, "<EVENT_HUB_NAMESPACE>.servicebus.windows.net", "<HUB_NAME>", new DefaultAzureCredential()); // Register handlers for processing events and handling errors processor.ProcessEventAsync += ProcessEventHandler; processor.ProcessErrorAsync += ProcessErrorHandler; // Start the processing await processor.StartProcessingAsync(); // Wait for 30 seconds for the events to be processed await Task.Delay(TimeSpan.FromSeconds(30)); // Stop the processing await processor.StopProcessingAsync(); Task ProcessEventHandler(ProcessEventArgs eventArgs) { // Write the body of the event to the console window Console.WriteLine("\tReceived event: {0}", Encoding.UTF8.GetString(eventArgs.Data.Body.ToArray())); Console.ReadLine(); return Task.CompletedTask; } Task ProcessErrorHandler(ProcessErrorEventArgs eventArgs) { // Write details about the error to the console window Console.WriteLine($"\tPartition '{eventArgs.PartitionId}': an unhandled exception was encountered. This was not expected to happen."); Console.WriteLine(eventArgs.Exception.Message); Console.ReadLine(); return Task.CompletedTask; }
Выполните сборку проекта и убедитесь, что она прошла без ошибок.
Примечание.
Полный исходный код с более подробными комментариями приводится в этом файле в GitHub.
Запустите приложение получателя.
Отобразится сообщение о том, что события получены. Нажмите клавишу ВВОД после того, как появится полученное сообщение о событии.
Received event: Event 1 Received event: Event 2 Received event: Event 3
Здесь отображаются те же три события, которые вы ранее отправили в концентратор событий, выполняя программу отправителя.
В портале Azure можно убедиться в наличии трех исходящих сообщений, которые Azure Event Hubs отправили в принимающее приложение. Обновите страницу, чтобы обновить диаграмму. На отображение полученных сообщений может уйти несколько секунд.
Проверка схемы для приложений пакета SDK для Центров событий
Реестр схем Azure можно использовать для проверки схемы при потоковой передаче данных с помощью приложений пакета SDK для Центров событий. Реестр схем Azure центров событий предоставляет централизованный репозиторий для управления схемами, и вы можете легко подключить новые или существующие приложения с реестром схем.
Дополнительные сведения см. в статье "Проверка схем с помощью пакета SDK центров событий".
Примеры и справочные материалы
В этом кратком руководстве приведены пошаговые инструкции по реализации сценария отправки пакета событий в концентратор событий, а затем их получения. Для получения дополнительных примеров выберите следующие ссылки.
- Примеры Azure Event Hubs на GitHub
- Примеры обработчика событий в GitHub
- Пример управления доступом на основе ролей в Azure (Azure RBAC)
Полный справочник по библиотеке .NET см. в нашей документации по пакету SDK.
Очистка ресурсов
Удалите группу ресурсов с пространством имен Центров событий или удалите только пространство имен, если вы хотите сохранить группу ресурсов.
Связанный контент
См. следующее руководство.