azure - 您能否保证将事件恰好一次发布到事件中心?

标签 azure azure-eventhub

我知道向消费者传递单个事件中心消息至少一次,并且我可以看到大量与此相关的文档。但是,如果我是事件发布者,我是否可以保证我的事件只发布到流一次?

鉴于我可能无法收到指示发布消息是否成功的响应,我别无选择,只能重试。有什么因素可以阻止我的事件在中心上重复吗?

最佳答案

没有;事件中心生态系统中不保证恰好一次。

也就是说,如果您愿意依赖测试版,Azure.Messaging.EventHubs在 v5.7.0-beta.x 中引入了一个新的缓冲生产者,它支持幂等重试。启用此功能后,生产者使用的隐式重试将有助于防止重复。

但是,需要注意的是,这是尽力而为,并且不会改变至少一次保证。无论发布时是否存在重复事件,消费者都应该做好准备并防止阅读重复事件。

要启用它,您需要配置类似于以下内容的缓冲生产者:

var connectionString = "<< CONNECTION STRING FOR THE EVENT HUBS NAMESPACE >>";
var eventHubName = "<< NAME OF THE EVENT HUB >>";

var options = new EventHubBufferedProducerClientOptions
{
    EnableIdempotentRetries = true
};

var producer = new EventHubBufferedProducerClient(
    connectionString, 
    eventHubName, 
    options);

有关缓冲生产者的更多信息可以在 Publishing Events sample 中找到。用于 SDK。

尽管我们目前的目标是五月初,但我们还没有确定其稳定版本的具体日期。请注意,我们不建议在关键生产场景中使用 beta 包。

关于azure - 您能否保证将事件恰好一次发布到事件中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71382127/

相关文章:

azure - 为什么逻辑应用的 if() 表达式同时执行两个代码路径?

azure - 将 Terraform 连接到 Azure Gov

azure - 避免从 EventHub 并行消耗相同事件

azure - 订阅 Azure IoT 中心设备事件

Azure Node Function w/Eventhub 输出绑定(bind)到动态路由 ADX 表

Azure 事件中心 - 具有 SQL 检查点的自定义使用者

c# - 上传 Blob 时引发类型 'System.OutOfMemoryException' 的异常

c# - Azure Functions 无法从 ABCpdf Nuget 包加载 DLL

node.js - 如何从 Node js将数据发送到azure事件网格中的主题端点

c# - EventHubTrigger EventData[] 绑定(bind)不起作用