.NET Aspire Azure Event Hubs интеграция
Azure Event Hubs — это собственная служба потоковой передачи данных в облаке, которая может передавать миллионы событий в секунду с низкой задержкой из любого источника в любое место назначения. Интеграция .NET AspireAzure Event Hubs позволяет вам подключаться к экземплярам Azure Event Hubs из ваших приложений .NET.
Хостинг-интеграция
.NET .NET Aspire Azure Event Hubs хостинговая интеграция моделирует различные ресурсы концентратора событий как следующие типы:
- AzureEventHubsResource: представляет ресурс верхнего уровня Azure Event Hubs, используемый для представления коллекций центров и сведений о подключении к базовому ресурсу Azure.
- AzureEventHubResource: представляет один ресурс концентратора событий.
- AzureEventHubsEmulatorResource: представляет эмулятор Azure Event Hubs в качестве ресурса контейнера.
- AzureEventHubConsumerGroupResourceпредставляет группу потребителей в ресурсе Концентратора событий.
Чтобы получить доступ к этим типам и API для их использования в проекте приложения, установите пакет NuGet 📦Aspire.Hosting.Azure.EventHubs:
dotnet add package Aspire.Hosting.Azure.EventHubs
Дополнительные сведения см. в статье dotnet add package или Управление зависимостями пакетов в .NET applications.
Добавьте ресурс Azure Event Hubs
Чтобы добавить AzureEventHubsResource в проект узла приложения, вызовите метод AddAzureEventHubs, предоставляющий имя, а затем вызовите AddHub:
var builder = DistributedApplication.CreateBuilder(args);
var eventHubs = builder.AddAzureEventHubs("event-hubs");
eventHubs.AddHub("messages");
builder.AddProject<Projects.ExampleService>()
.WithReference(eventHubs);
// After adding all resources, run the app...
При добавлении ресурса Azure Event Hubs в хост приложения, он предоставляет другие полезные API для добавления ресурсов Шины событий, групп потребителей, явной настройки выделения ресурсов и активации использования эмулятора Azure Event Hubs. Приведенный выше код добавляет ресурс Azure Event Hubs с именем event-hubs
и концентратор событий с именем messages
в проект узла приложения. Метод WithReference передает сведения о подключении в проект ExampleService
.
Важный
При вызове AddAzureEventHubsон неявно вызывает AddAzureProvisioning(IDistributedApplicationBuilder), что добавляет поддержку для динамической генерации ресурсов типа Azure во время запуска приложения. Приложение должно конфигурировать соответствующую подписку и местоположение. Дополнительные сведения см. в разделе Локальная подготовка: настройка
Созданное ресурсное обеспечение Bicep
Если вы не знакомы с Bicep, это предметно-ориентированный язык для описания ресурсов Azure. При использовании .NET.NET Aspireвам не нужно писать Bicep вручную, подготовительные API создают Bicep для вас. При публикации приложения сгенерированный файл Bicep выводится рядом с файлом манифеста. При добавлении ресурса Azure Event Hubs создается следующий Bicep:
@description('The location for the resource(s) to be deployed.')
param location string = resourceGroup().location
param sku string = 'Standard'
param principalType string
param principalId string
resource event_hubs 'Microsoft.EventHub/namespaces@2024-01-01' = {
name: take('event_hubs-${uniqueString(resourceGroup().id)}', 256)
location: location
sku: {
name: sku
}
tags: {
'aspire-resource-name': 'event-hubs'
}
}
resource event_hubs_AzureEventHubsDataOwner 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(event_hubs.id, principalId, subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'f526a384-b230-433a-b45c-95f59c4a2dec'))
properties: {
principalId: principalId
roleDefinitionId: subscriptionResourceId('Microsoft.Authorization/roleDefinitions', 'f526a384-b230-433a-b45c-95f59c4a2dec')
principalType: principalType
}
scope: event_hubs
}
resource messages 'Microsoft.EventHub/namespaces/eventhubs@2024-01-01' = {
name: 'messages'
parent: event_hubs
}
output eventHubsEndpoint string = event_hubs.properties.serviceBusEndpoint
Предыдущий Bicep — это модуль, который подготавливает ресурс Azure Event Hubs со следующими значениями по умолчанию:
-
location
: расположение группы ресурсов. -
sku
: По умолчанию SKU ресурса Центров событий - этоStandard
. -
principalId
: основной идентификатор ресурса Центров событий. -
principalType
: основной тип ресурса Центров событий. -
event_hubs
: ресурс пространства имен Event Hubs. -
event_hubs_AzureEventHubsDataOwner
: владелец ресурса Центров событий, назначаемый на основе встроенной ролиAzure Event Hubs Data Owner
. Дополнительные сведения см. в Azure Event Hubsвладельца данных. -
messages
: ресурс Концентратора событий. -
eventHubsEndpoint
: конечная точка ресурса Центров событий.
Созданный файл Bicep является отправной точкой и его можно настроить в соответствии с вашими специфическими требованиями.
Настройка инфраструктуры подготовки
Все .NET AspireAzure ресурсы — это подклассы типа AzureProvisioningResource. Этот тип позволяет конфигурировать созданный Bicep, предоставляя гибкий API для настройки ресурсов Azure с помощью API ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>). Например, можно настроить kind
, consistencyPolicy
, locations
и многое другое. В следующем примере показано, как настроить ресурс AzureAzure Cosmos DB:
builder.AddAzureEventHubs("event-hubs")
.ConfigureInfrastructure(infra =>
{
var eventHubs = infra.GetProvisionableResources()
.OfType<EventHubsNamespace>()
.Single();
eventHubs.Sku = new EventHubsSku()
{
Name = EventHubsSkuName.Premium,
Tier = EventHubsSkuTier.Premium,
Capacity = 7,
};
eventHubs.PublicNetworkAccess = EventHubsPublicNetworkAccess.SecuredByPerimeter;
eventHubs.Tags.Add("ExampleKey", "Example value");
});
Предыдущий код:
- Связывает вызов с API ConfigureInfrastructure:
- Параметр
infra
является экземпляром типа AzureResourceInfrastructure. - Ресурсы, доступные для предоставления, извлекаются через вызов метода GetProvisionableResources().
- Извлекается один EventHubsNamespace ресурс.
- Свойство EventHubsNamespace.Sku назначается новому экземпляру EventHubsSku с именем и уровнем
Premium
иCapacity
7
. - Свойство PublicNetworkAccess назначается
SecuredByPerimeter
. - Тег добавляется в ресурс Event Hubs с ключом
ExampleKey
и значениемExample value
.
- Параметр
Существует множество дополнительных параметров конфигурации для настройки ресурса Центров событий. Дополнительные сведения см. в разделе Azure.Provisioning.PostgreSql. Дополнительные сведения см. в настройках Azure.Provisioning
.
Подключитесь к существующему пространству имен Azure Event Hubs
Возможно, у вас есть существующее пространство имен Azure Event Hubs, к которому требуется подключиться. Вместо представления нового ресурса Azure Event Hubs можно добавить строку подключения к узлу приложения. Чтобы добавить подключение к существующему пространству имен Azure Event Hubs, вызовите метод AddConnectionString:
var builder = DistributedApplication.CreateBuilder(args);
var eventHubs = builder.AddConnectionString("event-hubs");
builder.AddProject<Projects.WebApplication>("web")
.WithReference(eventHubs);
// After adding all resources, run the app...
Заметка
Строки подключения используются для представления широкого диапазона сведений о подключении, включая подключения к базе данных, брокеры сообщений, URI конечной точки и другие службы. В .NET.NET Aspire номенклатуре термин "строка подключения" используется для представления любой информации о подключении.
Строка подключения настраивается в конфигурации узла приложения, как правило, в разделе Секреты пользователейв разделе ConnectionStrings
. Хост приложения внедряет эту строку подключения как переменную среды во все зависимые ресурсы, например:
{
"ConnectionStrings": {
"event-hubs": "{your_namespace}.servicebus.windows.net"
}
}
Зависимый ресурс может получить доступ к внедренной строке подключения, вызвав метод GetConnectionString и передав имя подключения в качестве параметра, в этом случае "event-hubs"
. API GetConnectionString
— это шортхэнд для IConfiguration.GetSection("ConnectionStrings")[name]
.
Добавление группы потребителей Концентратора событий
Чтобы добавить группу потребителей, выполните цепочку вызовов IResourceBuilder<AzureEventHubsResource>
в API AddConsumerGroup:
var builder = DistributedApplication.CreateBuilder(args);
var eventHubs = builder.AddAzureEventHubs("event-hubs");
var messages = eventHubs.AddHub("messages");
messages.AddConsumerGroup("messagesConsumer");
builder.AddProject<Projects.ExampleService>()
.WithReference(eventHubs);
// After adding all resources, run the app...
Когда вы вызываете AddConsumerGroup
, он настраивает ресурс центра событий messages
с группой потребителей с именем messagesConsumer
. Группа потребителей создается в пространстве имен Azure Event Hubs, представленном AzureEventHubsResource
, который вы добавили ранее. Дополнительные сведения см. в разделе Azure Event Hubs: группы потребителей.
Добавьте ресурс эмулятора Azure Event Hubs
Интеграция размещения .NET AspireAzure Event Hubs поддерживает локальный запуск ресурса Центров событий с использованием эмулятора на основе образа контейнера mcr.microsoft.com/azure-messaging/eventhubs-emulator/latest
. Это полезно для ситуаций, когда вы хотите локально запустить ресурс Центров событий для целей разработки и тестирования, избегая необходимости подготовить ресурс Azure или подключиться к существующему серверу Azure Event Hubs.
Чтобы запустить ресурс Центров событий в качестве эмулятора, вызовите метод RunAsEmulator:
var builder = DistributedApplication.CreateBuilder(args);
var eventHubs = builder.AddAzureEventHubs("event-hubs")
.RunAsEmulator();
eventHubs.AddHub("messages");
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(eventHubs);
// After adding all resources, run the app...
Приведенный выше код настраивает ресурс Azure Event Hubs для локального запуска в контейнере. Дополнительные сведения см. в эмуляторе Azure Event Hubs.
Настройка контейнера эмулятора Центров событий
Существуют различные конфигурации, доступные для ресурсов контейнера. Например, можно настроить порты контейнера, присоединение данных в режиме bind, объемы данных, или предоставить целостную JSON конфигурацию, которая переопределяет все.
Настройка порта узла контейнера эмулятора центров событий
По умолчанию контейнер эмулятора Центров событий при настройке .NET.NET Aspireпредоставляет следующие конечные точки:
Конечная точка | Образ | Порт контейнера | Порт хоста |
---|---|---|---|
emulator |
mcr.microsoft.com/azure-messaging/eventhubs-emulator/latest |
5672 | динамический |
По умолчанию прослушиваемый порт является динамическим. При запуске контейнера порт сопоставляется со случайным портом на хост-компьютере. Чтобы настроить порт конечной точки, выполните вызов цепочки методов в построителе ресурсов контейнера, который предоставлен методом RunAsEmulator
, а затем WithHostPort(IResourceBuilder<AzureEventHubsEmulatorResource>, Nullable<Int32>), как показано в следующем примере:
var builder = DistributedApplication.CreateBuilder(args);
var eventHubs = builder.AddAzureEventHubs("event-hubs")
.RunAsEmulator(emulator =>
{
emulator.WithHostPort(7777);
});
eventHubs.AddHub("messages");
builder.AddProject<Projects.ExampleService>()
.WithReference(eventHubs);
// After adding all resources, run the app...
Приведенный выше код настраивает существующую конечную точку emulator
эмулятора событий Azure для прослушивания 7777
порта. Порт эмулятора событий Azure сопоставляется с портом узла, как показано в следующей таблице:
Имя конечной точки | Сопоставление портов (container:host ) |
---|---|
emulator |
5672:7777 |
Добавление эмулятора Центров событий с томом данных
Чтобы добавить том данных в ресурс эмулятора Центров событий, вызовите метод WithDataVolume в ресурсе эмулятора Центров событий:
var builder = DistributedApplication.CreateBuilder(args);
var eventHubs = builder.AddAzureEventHubs("event-hubs")
.RunAsEmulator(emulator =>
{
emulator.WithDataVolume();
});
eventHubs.AddHub("messages");
builder.AddProject<Projects.ExampleService>()
.WithReference(eventHubs);
// After adding all resources, run the app...
Том данных используется для сохранения данных эмулятора Центров событий за пределами жизненного цикла контейнера. Том данных подключен в контейнере по пути /data
. Имя создается случайным образом, если не указать параметр name
. Дополнительную информацию об объемах данных и о том, почему они предпочтительнее привязок, смотрите в документации Docker: Объемы.
Добавление эмулятора Центров событий с подключением привязки данных
Чтобы добавить точку монтирования к контейнеру эмулятора Центров событий, выполните цепное обращение к API WithDataBindMount, как показано в следующем примере:
var builder = DistributedApplication.CreateBuilder(args);
var eventHubs = builder.AddAzureEventHubs("event-hubs")
.RunAsEmulator(emulator =>
{
emulator.WithDataBindMount("/path/to/data");
});
eventHubs.AddHub("messages");
builder.AddProject<Projects.ExampleService>()
.WithReference(eventHubs);
// After adding all resources, run the app...
Важный
Привязки данных имеют ограниченные функциональные возможности по сравнению с томами , которые обеспечивают более высокую производительность, переносимость и безопасность, что делает их более подходящими для производственных сред. Однако бинд-маунты позволяют напрямую получать доступ и изменять файлы на хост-системе, что идеально подходит для разработки и тестирования, когда требуются изменения в режиме реального времени.
Привязки данных зависят от файловой системы хост-компьютера, чтобы сохранять данные ресурсов эмулятора Azure Event Hubs на постоянной основе после перезапуска контейнера. Монтирование привязки данных выполняется на пути /path/to/data
на хост-компьютере в среде контейнера. Дополнительные сведения о точках привязки данных см. в документации Docker: привязка данных.
Настройка конфигурации контейнера эмулятора центров событий JSON
Контейнер эмулятора Центров событий выполняется с файлом config.json по умолчанию. Вы можете полностью переопределить этот файл или обновить конфигурацию JSON с помощью JsonNode представления конфигурации.
Чтобы предоставить пользовательский файл конфигурации JSON, вызовите метод WithConfigurationFile(IResourceBuilder<AzureEventHubsEmulatorResource>, String):
var builder = DistributedApplication.CreateBuilder(args);
var eventHubs = builder.AddAzureEventHubs("event-hubs")
.RunAsEmulator(emulator =>
{
emulator.WithConfigurationFile("./messaging/custom-config.json");
});
eventHubs.AddHub("messages");
builder.AddProject<Projects.ExampleService>()
.WithReference(eventHubs);
// After adding all resources, run the app...
Приведенный выше код настраивает контейнер эмулятора Центров событий для использования пользовательского файла конфигурации JSON, расположенного в ./messaging/custom-config.json
. Это будет подключено в путь /Eventhubs_Emulator/ConfigFiles/Config.json
контейнера как файл только для чтения. Чтобы вместо этого переопределить определенные свойства в конфигурации по умолчанию, вызовите метод WithConfiguration(IResourceBuilder<AzureEventHubsEmulatorResource>, Action<JsonNode>):
var builder = DistributedApplication.CreateBuilder(args);
var eventHubs = builder.AddAzureEventHubs("event-hubs")
.RunAsEmulator(emulator =>
{
emulator.WithConfiguration(
(JsonNode configuration) =>
{
var userConfig = configuration["UserConfig"];
var ns = userConfig["NamespaceConfig"][0];
var firstEntity = ns["Entities"][0];
firstEntity["PartitionCount"] = 5;
});
});
eventHubs.AddHub("messages");
builder.AddProject<Projects.ExampleService>()
.WithReference(eventHubs);
// After adding all resources, run the app...
Предыдущий код извлекает узел UserConfig
из конфигурации по умолчанию. Затем он обновляет PartitionCount
первой сущности на 5
.
Проверка работоспособности хостинговой интеграции
Интеграция размещения Azure Event Hubs автоматически добавляет проверку работоспособности для ресурса Event Hubs. Проверка работоспособности удостоверяется в том, что центр событий запущен и что с ним можно установить подключение.
Интеграция размещения зависит от пакета NuGet AspNetCore.HealthChecks.Azure.Messaging.EventHubs 📦.
интеграция Client
Чтобы приступить к работе с интеграцией клиента .NET AspireAzure Event Hubs, установите пакет NuGet 📦Aspire.Azure.Messaging.EventHubs в проекте приложения, который использует клиент Центров событий.
dotnet add package Aspire.Azure.Messaging.EventHubs
Поддерживаемые типы клиентов Центров событий
Следующие клиенты Концентратора событий поддерживаются библиотекой вместе с соответствующими параметрами и классами параметров:
Типы клиентов из пакета SDK Azure для .NET, как и соответствующие классы параметров. Классы настроек предоставляются .NET.NET Aspire. Классы параметров используются для настройки экземпляров клиента.
Добавление клиента производителя Центров событий
В файле Program.cs проекта, используемого клиентом, вызовите метод расширения AddAzureEventHubProducerClient для любого IHostApplicationBuilder, чтобы зарегистрировать EventHubProducerClient для использования с помощью контейнера внедрения зависимостей. Метод принимает параметр имени подключения.
builder.AddAzureEventHubProducerClient(connectionName: "event-hubs");
Подсказка
Параметр connectionName
должен соответствовать имени, используемому при добавлении ресурса Центров событий в проект узла приложения. Дополнительные сведения см. Добавление ресурса Azure Event Hubs.
После добавления EventHubProducerClient
можно получить экземпляр клиента с помощью инъекции зависимостей. Например, чтобы получить объект источника данных из примера службы, определите его как параметр конструктора и убедитесь, что класс ExampleService
зарегистрирован в контейнере внедрения зависимостей:
public class ExampleService(EventHubProducerClient client)
{
// Use client...
}
Дополнительные сведения см. в следующем разделе:
-
Azure. Документация по Messaging.EventHubs для примеров использования
EventHubProducerClient
. - внедрение зависимостей в .NET подробные сведения о внедрении зависимостей.
Дополнительные API для рассмотрения
Интеграция клиента предоставляет дополнительные API для настройки экземпляров клиента. Если необходимо зарегистрировать клиент Центров событий, рассмотрите следующие API:
Все перечисленные выше API включают необязательные параметры для настройки экземпляров клиента.
Добавление клиента производителя центров событий с ключами
Могут возникнуть случаи, когда требуется зарегистрировать несколько экземпляров EventHubProducerClient
с разными именами соединений. Чтобы зарегистрировать ключи клиентов Центров событий, вызовите метод AddKeyedAzureServiceBusClient:
builder.AddKeyedAzureEventHubProducerClient(name: "messages");
builder.AddKeyedAzureEventHubProducerClient(name: "commands");
Важный
При использовании ключевых служб ожидается, что ресурс Центров событий настраивает два именованных концентратора, один для messages
и один для commands
.
Затем можно получить экземпляры клиента с помощью внедрения зависимостей. Например, чтобы получить клиентов из сервиса:
public class ExampleService(
[KeyedService("messages")] EventHubProducerClient messagesClient,
[KeyedService("commands")] EventHubProducerClient commandsClient)
{
// Use clients...
}
Для получения дополнительной информации см. раздел «Ключевые услуги» в .NET.
Дополнительные ключевые API для рассмотрения
Интеграция клиента предоставляет дополнительные API для настройки ключевых экземпляров клиента. Если необходимо зарегистрировать клиент центров событий с ключами, рассмотрите следующие API:
Все перечисленные выше API включают необязательные параметры для настройки экземпляров клиента.
Конфигурация
Библиотека .NET AspireAzure Event Hubs предоставляет несколько вариантов настройки подключения Azure Event Hubs на основе требований и соглашений проекта. Необходимо предоставить либо FullyQualifiedNamespace
, либо ConnectionString
.
Используйте строку подключения
При использовании строки подключения из раздела конфигурации ConnectionStrings
укажите имя строки подключения при вызове builder.AddAzureEventHubProducerClient()
и других поддерживаемых клиентов Центров событий. В этом примере строка подключения не включает свойство EntityPath
, поэтому свойство EventHubName
должно быть задано в обратном вызове параметров:
builder.AddAzureEventHubProducerClient(
"event-hubs",
static settings =>
{
settings.EventHubName = "MyHub";
});
А затем сведения о подключении будут получены из раздела конфигурации ConnectionStrings
. Поддерживаются два формата подключения:
Полное пространство имен (FQN)
Рекомендуемый подход — использовать полное пространство имен, которое взаимодействует с свойством AzureMessagingEventHubsSettings.Credential для установления подключения. Если учетные данные не настроены, используется DefaultAzureCredential.
{
"ConnectionStrings": {
"event-hubs": "{your_namespace}.servicebus.windows.net"
}
}
Строка подключения
Кроме того, используйте строку подключения:
{
"ConnectionStrings": {
"event-hubs": "Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=accesskeyname;SharedAccessKey=accesskey;EntityPath=MyHub"
}
}
Использование поставщиков конфигураций
Библиотека .NET AspireAzure Event Hubs поддерживает Microsoft.Extensions.Configuration. Он загружает из конфигурации AzureMessagingEventHubsSettings
и связанные параметры, например EventProcessorClientOptions
, используя префикс ключа Aspire:Azure:Messaging:EventHubs:
, за которым следует имя конкретного клиента. Например, рассмотрим appsettings.json, который конфигурирует некоторые параметры для EventProcessorClient
:
{
"Aspire": {
"Azure": {
"Messaging": {
"EventHubs": {
"EventProcessorClient": {
"EventHubName": "MyHub",
"ClientOptions": {
"Identifier": "PROCESSOR_ID"
}
}
}
}
}
}
}
Можно также настроить тип параметров с помощью необязательного параметра Action<IAzureClientBuilder<EventProcessorClient, EventProcessorClientOptions>> configureClientBuilder
метода AddAzureEventProcessorClient
. Например, чтобы задать идентификатор клиента процессора для этого клиента:
builder.AddAzureEventProcessorClient(
"event-hubs",
configureClientBuilder: clientBuilder => clientBuilder.ConfigureOptions(
options => options.Identifier = "PROCESSOR_ID"));
Наблюдаемость и телеметрия
.NET
.NET Aspire интеграции автоматически настраивают конфигурации логирования, трассировки и метрик, которые иногда называются столпами наблюдаемости. Дополнительные сведения об наблюдаемости интеграции и телеметрии см. в .NET.NET Aspire обзоре интеграции. В зависимости от резервной службы некоторые интеграции могут поддерживать только некоторые из этих функций. Например, некоторые интеграции поддерживают ведение журнала и трассировку, но не метрики. Функции телеметрии также можно отключить с помощью методов, представленных в разделе конфигурации
Лесозаготовка
Интеграция .NET AspireAzure Event Hubs использует следующие категории журналов:
Azure.Core
Azure.Identity
Отслеживание
Интеграция .NET AspireAzure Event Hubs будет испускать следующие действия трассировки с помощью OpenTelemetry:
Azure.Messaging.EventHubs.*
Метрика
Интеграция .NET AspireAzure Event Hubs в настоящее время не поддерживает метрики по умолчанию из-за ограничений пакета SDK Azure для .NET. Если это изменится в будущем, этот раздел будет обновлен для отражения этих изменений.
См. также
- Azure Event Hubs
- Обзор интеграции
- интеграции .NET.NET Aspire
- .NET Aspire GitHub репозиторий
.NET Aspire