Azure Service Bus“最多一次”传递功能的实际含义,价值和用途是什么?

时间:2019-02-15 22:20:43

标签: azure message-queue azureservicebus

服务总线documentation指出:“可以通过使用会话状态来存储应用程序状态并使用事务来原子接收消息并更新会话状态来支持At-Most-Once语义。”这里的“会话”似乎是指服务总线的messaging sessions,其中包括存储任意状态的能力。这种机制使您可以在事务中注册状态更新以及对消息的操作。

我知道如何将其用于可靠地维护使用消息会话的应用程序的状态。如果您可以在同一事务中更新应用程序状态并完成一条消息,则正确实现的应用程序可能会在执行过程中的任何地方死亡,并且可以确保在恢复时继承可以成功进行有序连续会话处理的状态(示例代码是here,虽然很奇怪,但它是doesn't actually use transactions,尽管我知道它是如何实现的以及将完成的工作。)

我没有看到的是这一切如何转换为“最多一次”交付。关于服务总线(包括会话状态的更新)的任何内容都不能加入分布式事务中。那么“最多一次”到底是什么意思,它能实现什么?以及Azure Storage queues do not时,Service Bus的哪些独特功能使其支持“最多一次”交付?

1 个答案:

答案 0 :(得分:1)

在查看了您的帖子并阅读了文档之后,我意识到它并没有真正解释at-most-once

因此,我与有关团队联系,并确认这确实是不正确的。提出了一个PR来相应地修复文档。

相反,会话和事务一起提供了更高级别的一致性,通常称为exactly-once处理(仅消息代理本身并不能与具有重复数据删除功能的接收器一起真正实现该处理)

PS:只需使用ReceiveAndDelete模式就可以实现at-most-once