.NET Aspire Azure Event Hubs 集成
本文介绍如何使用 .NET AspireAzure Event Hubs 集成。
Aspire.Azure.Messaging.EventHubs
库提供了用于注册以下类型的选项:
- EventHubProducerClient
- EventHubBufferedProducerClient
- EventHubConsumerClient
- EventProcessorClient
- PartitionReceiver
这些类型在 DI 容器中注册,以用于连接到 Azure Event Hubs。
先决条件
- Azure 订阅:免费创建一个订阅。
- Azure Event Hubs 命名空间:有关详细信息,请参阅 添加事件中心命名空间。 另一种方法是使用连接字符串,但在生产环境中不推荐这样做。
入门
若要开始 .NET AspireAzure Event Hubs 集成,请在使用 Azure Event Hubsclient的应用程序项目中安装 📦Aspire。Azure。Messaging.EventHubs NuGet 包,即用于 client的项目。
dotnet add package Aspire.Azure.Messaging.EventHubs
有关详细信息,请参阅 dotnet add package 或 管理 .NET 应用程序中的包依赖性。
支持具有选项类的客户端
库支持以下客户端及其相应的选项和设置类:
Azure Client 类型 | Azure Options 类 | .NET .NET Aspire 设置类 |
---|---|---|
EventHubProducerClient |
EventHubProducerClientOptions |
AzureMessagingEventHubsProducerSettings |
EventHubBufferedProducerClient |
EventHubBufferedProducerClientOptions |
AzureMessagingEventHubsBufferedProducerSettings |
EventHubConsumerClient |
EventHubConsumerClientOptions |
AzureMessagingEventHubsConsumerSettings |
EventProcessorClient |
EventProcessorClientOptions |
AzureMessagingEventHubsProcessorSettings |
PartitionReceiver |
PartitionReceiverOptions |
AzureMessagingEventHubsPartitionReceiverSettings |
client 类型来自用于 .NET的 Azure SDK,相应的选项类也一样。 设置类由 .NET AspireAzure Event Hubs 集成库提供。
示例用法
以下示例假定你创建了一个 Azure Event Hubs 命名空间,并创建了一个事件中心,并希望配置 EventHubProducerClient
以将事件发送到事件中心。
EventHubBufferedProducerClient
、EventHubConsumerClient
、EventProcessorClient
和 PartitionReceiver
配置方式类似。
在 client消耗项目的 Program.cs 文件中,调用 AddAzureEventHubProducerClient
扩展以注册 EventHubProducerClient
,以便通过依赖项注入容器使用。
builder.AddAzureEventHubProducerClient("eventHubsConnectionName");
然后,可以使用依赖项注入检索 EventHubProducerClient
实例。 例如,要从某个服务中检索 client,
public class ExampleService(EventHubProducerClient client)
{
// Use client...
}
有关详细信息,请参阅 Azure.Messaging.EventHubs 文档,以获取有关使用 EventHubProducerClient
的示例。
应用主机使用情况
若要将 Azure 事件中心托管支持添加到 IDistributedApplicationBuilder,请在 应用主机 项目中安装 📦Aspire.Hosting.Azure.EventHubs NuGet 包。
dotnet add package Aspire.Hosting.Azure.EventHubs
在应用主机项目中,添加事件中心连接和事件中心资源,并使用以下方法使用连接:
var builder = DistributedApplication.CreateBuilder(args);
var eventHubs = builder.AddAzureEventHubs("eventHubsConnectionName")
.AddEventHub("MyHub");
var exampleService = builder.AddProject<Projects.ExampleService>()
.WithReference(eventHubs);
AddAzureEventHubs
方法将从 AppHost 的配置中(例如,从 ConnectionStrings:eventHubsConnectionName
配置密钥下的“用户机密信息”)读取连接信息。
WithReference
方法将该连接信息传递到 ExampleService
项目中名为 eventHubsConnectionName
的连接字符串中。
从 .NET Aspire 8.1 开始,.NET Aspire 的 Azure EventHubs 扩展支持为 EventHubs 启动本地模拟器。 可以通过应用 RunAsEmulator()
扩展方法来使用模拟器,如下所示:
var eventHubs = builder.AddAzureEventHubs("eventHubsConnectionName")
.RunAsEmulator()
.AddEventHub("MyHub");
Azure EventHubs 的模拟器会导致在派生自事件中心资源名称 .NET Aspire 内部启动两个容器资源。
重要
尽管我们正在创建事件中心,同时使用 AddEventHub
作为命名空间,从 .NET.NET Aspire 版本 preview-5
开始,连接字符串也不会包含 EntityPath
属性,因此必须在首选 client的设置回调中设置 EventHubName
属性。
Aspire 的未来版本将在连接字符串中包含 EntityPath
属性,并且不需要在此方案中设置 EventHubName
属性。
在 ExampleService
的 Program.cs 文件中,可以通过调用受支持的 client 事件中心扩展方法来实现连接。
builder.AddAzureEventProcessorClient(
"eventHubsConnectionName",
static settings =>
{
settings.EventHubName = "MyHub";
});
配置
.NET Aspire
Azure Event Hubs 库提供了多个选项,用于根据项目的要求和约定配置 Azure Event Hubs 连接。 必须提供一个FullyQualifiedNamespace
或ConnectionString
。
使用连接字符串
使用 ConnectionStrings
配置部分中的连接字符串时,在调用 builder.AddAzureEventHubProducerClient()
和其他受支持的事件中心客户端时提供连接字符串的名称。 在此示例中,连接字符串不包括 EntityPath
属性,因此必须在设置回调中设置 EventHubName
属性:
builder.AddAzureEventHubProducerClient(
"eventHubsConnectionName",
static settings =>
{
settings.EventHubName = "MyHub";
});
然后,将从 ConnectionStrings
配置部分检索连接信息。 支持两种连接格式:
完全限定的命名空间 (FQN)
建议的方法是使用命名空间的完全限定名,与 AzureMessagingEventHubsSettings.Credential
属性配合来建立连接。 如果未配置凭据,则使用 DefaultAzureCredential。
{
"ConnectionStrings": {
"eventHubsConnectionName": "{your_namespace}.servicebus.windows.net"
}
}
连接字符串
或者,使用连接字符串:
{
"ConnectionStrings": {
"eventHubsConnectionName": "Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=accesskeyname;SharedAccessKey=accesskey;EntityPath=MyHub"
}
}
使用配置提供程序
.NET Aspire
Azure Event Hubs 库支持 Microsoft.Extensions.Configuration。 通过使用 Aspire:Azure:Messaging:EventHubs:
键前缀从配置中加载 AzureMessagingEventHubsSettings
及其关联选项(例如 EventProcessorClientOptions
),然后是正在使用的特定 client 的名称。 例如,考虑一下用于配置 EventProcessorClient
某些选项的 appsettings.json:
{
"Aspire": {
"Azure": {
"Messaging": {
"EventHubs": {
"EventProcessorClient": {
"EventHubName": "MyHub",
"ClientOptions": {
"Identifier": "PROCESSOR_ID"
}
}
}
}
}
}
}
还可以使用 AddAzureEventProcessorClient
方法的可选 Action<IAzureClientBuilder<EventProcessorClient, EventProcessorClientOptions>> configureClientBuilder
参数设置选项类型。 例如,若要为此 client设置处理器的 client ID:
builder.AddAzureEventProcessorClient(
"eventHubsConnectionName",
configureClientBuilder: clientBuilder => clientBuilder.ConfigureOptions(
options => options.Identifier = "PROCESSOR_ID"));
可观测性和遥测
.NET .NET Aspire 集成会自动设置日志记录、跟踪和指标配置,这些配置有时称为 可观测性的支柱。 有关集成可观测性和遥测的详细信息,请参阅 .NET.NET Aspire 集成概述。 根据支持服务,某些集成可能仅支持其中一些功能。 例如,某些集成支持日志记录和跟踪,但不支持指标。 也可以使用 配置 部分中介绍的技术禁用遥测功能。
伐木
.NET Aspire Azure Event Hubs 集成使用以下日志类别:
Azure.Core
Azure.Identity
追踪
.NET Aspire Azure Event Hubs 集成将使用 OpenTelemetry发出以下跟踪活动:
- “Azure。Messaging.EventHubs.*”
指标
由于Azure SDK 在.NET上的限制,.NET AspireAzure Event Hubs 集成目前默认不支持指标。 如果将来发生此更改,将更新此部分以反映这些更改。