我知道向消费者传递单个事件中心消息至少一次,并且我可以看到大量与此相关的文档。但是,如果我是事件发布者,我是否可以保证我的事件只发布到流一次?
鉴于我可能无法收到指示发布消息是否成功的响应,我别无选择,只能重试。有什么因素可以阻止我的事件在中心上重复吗?
最佳答案
没有;事件中心生态系统中不保证恰好一次。
也就是说,如果您愿意依赖测试版,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/