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

问题描述 投票:0回答:1

服务总线documentation声明“通过使用会话状态来存储应用程序状态并使用事务以原子方式接收消息并更新会话状态,可以支持最多一次语义。”这里的“会话”似乎是指服务总线'messaging sessions,其中包括存储任意状态的能力。此机制允许您在事务中注册状态更新以及对消息的操作。

我看到如何使用它来可靠地维护使用消息会话的应用程序的状态。如果您可以在同一事务中更新应用程序状态并完成消息,则正确实现的应用程序可能会在执行中的任何位置死亡,并且在恢复时将保证继承导致成功的,按顺序继续会话处理的状态(示例代码是here,虽然奇怪的是它doesn't actually use transactions,虽然我看到它怎么可能和那将完成什么)。

我没有看到的是,这种情况如何转化为“最多一次”交付。关于服务总线的任何内容,包括会话状态的更新,都可以在分布式事务中注册。那么“至多一次”究竟意味着什么,它实现了什么?而且,当Azure Storage queues do not时,Service Bus的一个显着特点是它能够支持“最多一次”交付吗?

azure message-queue azureservicebus
1个回答
1
投票

看完你的帖子并阅读文档后,我意识到它并没有真正解释at-most-once

所以我联系了有关团队并确认这确实是不正确的。已经提出了PR来相应地修复文档。

相反,会话和事务一起提供更高级别的一致性,这通常被称为exactly-once处理(这不仅仅是由消息代理本身实现,而是与能够进行重复数据删除的接收器一起实现)。

PS:at-most-once确实可以通过简单地使用ReceiveAndDelete模式

© www.soinside.com 2019 - 2024. All rights reserved.