你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

EventHubBufferedProducerClient 类

定义

负责将 实例 EventData 发布到特定事件中心的客户端。 根据事件排队时指定的选项,它们可能会自动分配给分区、根据指定的分区键进行分组或分配专门请求的分区。

EventHubBufferedProducerClient不会立即发布,而是使用延迟模型,其中将事件收集到缓冲区中,以便在批处理已满或MaximumWaitTime已过且未排队新事件时有效地批处理和发布它们。

此模型旨在将批处理管理的负担从调用方转移,代价是非确定性计时,以用于发布事件的时间。 此外,还需要考虑其他权衡:

  • 如果应用程序崩溃,则缓冲区中的事件将不会发布。 为了防止数据丢失,建议调用方使用 SendEventBatchSucceededAsyncSendEventBatchFailedAsync 处理程序跟踪发布进度。
  • 为指定分区键的事件分配的分区可能不同于与其他生成者使用同一键的事件。
  • 如果分区暂时不可用, EventHubBufferedProducerClient 则 恢复所需的时间可能比其他生成者长。

如果必须立即发布具有确定性结果的事件,请确保将分区键分配给与其他发布者一致的分区,或者需要最大化可用性,建议使用 EventHubProducerClient

public class EventHubBufferedProducerClient : IAsyncDisposable
type EventHubBufferedProducerClient = class
    interface IAsyncDisposable
Public Class EventHubBufferedProducerClient
Implements IAsyncDisposable
继承
EventHubBufferedProducerClient
实现

注解

在应用程序的生存期内,可以 EventHubBufferedProducerClient 安全地缓存和用作单一实例,这是建议的方法。 生成者负责确保高效使用网络、CPU 和内存。 CloseAsync(Boolean, CancellationToken)当不再有事件排队或关闭应用程序时,需要调用 或 DisposeAsync() ,以便可以刷新缓冲区并正确清理资源。

构造函数

EventHubBufferedProducerClient()

用于模拟生成者以进行测试。

EventHubBufferedProducerClient(EventHubConnection, EventHubBufferedProducerClientOptions)

初始化 EventHubBufferedProducerClient 类的新实例。

EventHubBufferedProducerClient(String)

初始化 EventHubBufferedProducerClient 类的新实例。

EventHubBufferedProducerClient(String, EventHubBufferedProducerClientOptions)

初始化 EventHubBufferedProducerClient 类的新实例。

EventHubBufferedProducerClient(String, String)

初始化 EventHubBufferedProducerClient 类的新实例。

EventHubBufferedProducerClient(String, String, AzureNamedKeyCredential, EventHubBufferedProducerClientOptions)

初始化 EventHubBufferedProducerClient 类的新实例。

EventHubBufferedProducerClient(String, String, AzureSasCredential, EventHubBufferedProducerClientOptions)

初始化 EventHubBufferedProducerClient 类的新实例。

EventHubBufferedProducerClient(String, String, EventHubBufferedProducerClientOptions)

初始化 EventHubBufferedProducerClient 类的新实例。

EventHubBufferedProducerClient(String, String, TokenCredential, EventHubBufferedProducerClientOptions)

初始化 EventHubBufferedProducerClient 类的新实例。

属性

EventHubName

此生成者连接到的事件中心的名称,特定于包含它的事件中心命名空间。

FullyQualifiedNamespace

此生成者当前与之关联的完全限定的事件中心命名空间,可能类似于 {yournamespace}.servicebus.windows.net

Identifier

用于标识缓冲生成者的唯一名称。

IsClosed

指示是否已关闭。EventHubBufferedProducerClient

IsPublishing

指示当前是否处于活动状态 EventHubBufferedProducerClient ,并发布排队事件。

TotalBufferedEventCount

所有分区中当前缓冲并等待发布的事件总数。

方法

CloseAsync(Boolean, CancellationToken)

关闭生成者并执行清理 使用 EventHubBufferedProducerClient的所有资源所需的任务。

DisposeAsync()

关闭生成者并执行清理 使用 EventHubBufferedProducerClient的所有资源所需的任务。

EnqueueEventAsync(EventData, CancellationToken)

将 排队 EventData 进入要发布到事件中心的缓冲区。 如果在调用此方法时缓冲区中没有容量,它将等待空间可用,并确保 eventData 已排队。

当此调用返回时, eventData 缓冲区中已接受 ,但可能尚未发布。 在处理缓冲区时,发布将在将来的不确定点进行。

EnqueueEventAsync(EventData, EnqueueEventOptions, CancellationToken)

将 排队 EventData 进入要发布到事件中心的缓冲区。 如果在调用此方法时缓冲区中没有容量,它将等待空间可用,并确保 eventData 已排队。

当此调用返回时, eventData 缓冲区中已接受 ,但可能尚未发布。 在处理缓冲区时,发布将在将来的不确定点进行。

EnqueueEventsAsync(IEnumerable<EventData>, CancellationToken)

将一组 EventData 排队到要发布到事件中心的缓冲区中。 如果在调用此方法时缓冲区中的容量不足,它将等待空间可用,并确保集中的所有eventsevents内容都已排队。

当此调用返回时, events 已接受到缓冲区,但可能尚未发布。 在处理缓冲区时,发布将在将来的不确定点进行。

EnqueueEventsAsync(IEnumerable<EventData>, EnqueueEventOptions, CancellationToken)

将一组 EventData 排队到要发布到事件中心的缓冲区中。 如果在调用此方法时缓冲区中的容量不足,它将等待空间可用,并确保集中的所有eventsevents内容都已排队。

当此调用返回时, events 已接受到缓冲区,但可能尚未发布。 在处理缓冲区时,发布将在将来的不确定点进行。

FlushAsync(CancellationToken)

尝试立即发布缓冲区中的所有事件。 这可能会导致发布多个批处理,每个批处理的结果将由 和 SendEventBatchFailedAsync 处理程序单独报告SendEventBatchSucceededAsync

完成此方法后,缓冲区将为空。

GetBufferedEventCount(String)

为给定分区缓冲并等待发布的事件数。

GetEventHubPropertiesAsync(CancellationToken)

检索与连接关联的事件中心的相关信息,包括存在的分区数及其标识符。

GetPartitionIdsAsync(CancellationToken)

检索事件中心分区的标识符集。

GetPartitionPropertiesAsync(String, CancellationToken)

检索有关事件中心的特定分区的信息,包括描述分区事件流中可用事件的元素。

ListPartitionIdsAsync(EventHubProducerClient, CancellationToken)

查询事件中心分区的标识符。

OnSendFailedAsync(IReadOnlyList<EventData>, Exception, String, CancellationToken)

负责在一批事件发布失败时引发 SendEventBatchFailedAsync 事件,在所有符合条件的重试都用完后引发事件。

OnSendSucceededAsync(IReadOnlyList<EventData>, String, CancellationToken)

负责在成功发布一批事件时引发 SendEventBatchSucceededAsync 事件。

事件

SendEventBatchFailedAsync

对于未能发布到事件中心的任何事件批处理调用,必须在事件排队之前提供此处理程序。 如果此生成者未使用 MaximumConcurrentSends 配置并且 MaximumConcurrentSendsPerPartition 都设置为 1,则将并发调用处理程序。

通过在此处理程序中调用 EnqueueEventAsync(EventData, EnqueueEventOptions, CancellationToken)EnqueueEventsAsync(IEnumerable<EventData>, EnqueueEventOptions, CancellationToken) 来尝试重新发送事件是安全的。 请务必注意,这样做会将它们放在缓冲区的末尾:不会保留原始顺序。

发布批处理失败后,将等待此处理程序;在处理程序调用返回之前,发布操作不会被视为已完成。 建议不要在处理程序中执行长时间运行的操作,以避免对吞吐量产生负面影响。

不建议从此处理程序调用 CloseAsync(Boolean, CancellationToken)DisposeAsync() ;如果等待这些调用,则这样做可能会导致死锁情况。

SendEventBatchSucceededAsync

在每批事件成功发布到事件中心后调用,此处理程序是可选的,旨在为感兴趣的侦听器提供通知。 如果此生成者已配置 MaximumConcurrentSendsMaximumConcurrentSendsPerPartition 设置为大于 1,则将并发调用处理程序。

发布批处理后,将等待此处理程序;在处理程序调用返回之前,发布操作不会被视为已完成。 建议不要在处理程序中执行长时间运行的操作,以避免对吞吐量产生负面影响。

不建议从此处理程序调用 CloseAsync(Boolean, CancellationToken)DisposeAsync() ;如果等待这些调用,则这样做可能会导致死锁情况。

适用于

另请参阅