azure-eventhub - Azure 事件中心是否保证至少交付一次?

标签 azure-eventhub

我正在构建一个 Azure Web 应用程序,我想将事件日志发送到 Azure 事件中心。如果应用程序主机和事件中心之间的连接丢失,会发生什么情况?事件中心客户端是否实现了某种本地队列?

最佳答案

TLDR:是的。 EventHubs 提供至少一次交付。 EventHub 客户端 SDK 不维护队列。它将抛出并且依赖的应用程序将需要重试发送。

EventHubs 服务保证至少一次交付。
只有当客户端从 EventHubs 服务收到“确认”时,发送调用才会成功。
EventHubs 服务不会等待客户端对其发送的“确认”的“确认”。简单来说 - 它不提供 Only-Once/Exactly-once 语义。

实现者视角 :
如果您熟悉 Client SDK, EventHubs 服务,甚至没有办法知道一条消息正在发送/传递两次 – 因为,目前还没有内置的方法 – 到 识别 留言 (例如:在 EventData 中没有类似 MessageID 的东西)。因此,EventHubs 服务可以提供的唯一保证是——无论发送到 eventHub 服务的数据是什么——它都会仅在持久化之后才向客户端确认 将消息发送到持久存储。这就是为什么,它被称为 至少一次 .同样适用于接收。
如果接收器客户端崩溃,在恢复后 - 返回您最后记住的偏移量 - EventHubs 服务将保证它会从那个确切的点重播流。
权衡电话 :
提供任何其他语义,如“最多一次”或“恰好一次”——消息级基础设施(每条消息的标识符和每条消息的计算以消除重复事件)——将是必需的。所以,在服务级别拥有这个功能很好 - 将带来额外的性能开销。
由于事件中心的权限是提供流语义,而这些实际上是按消息语义——事件中心服务选择将其推送到客户端库。
客户端库将需要构建它——依赖于——我们提供的 Exactly-once 语义。

哼!
斯里

关于azure-eventhub - Azure 事件中心是否保证至少交付一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33220685/

相关文章:

Azure Functions 与 IoT 中心

java - 如何检索 IoT 中心数据的属性而不仅仅是实际负载

c# - Azure 函数未由 EventHubTrigger 触发

azure - 在 C# 中为 Azure IoT 中心生成 SAS token 所需的参数

C# Azure EventHub 连接异常

azure - 将 Azure Application Insights 数据发送到事件中心

c# - 带有 eventData 对象的 EventHubTrigger C# 不起作用

Azure 事件中心 - "ErrorCode":"Forbidden","ErrorMessage":"SubCode=40300. 已达到或超过 EventHub 类型的资源最大数量

c# - Azure EventHub函数触发默认重试机制

Azure 事件中心吞吐量