【问题标题】:What is the actual meaning, value and usage of Azure Service Bus' "at most once" delivery capability?Azure Service Bus“最多一次”交付能力的实际意义、价值和用途是什么?
【发布时间】:2019-02-22 02:13:28
【问题描述】:

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

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

我没有看到这些如何转化为“最多一次”交付。服务总线的任何内容,包括会话状态的更新,都不能注册到分布式事务中。那么“最多一次”究竟是什么意思,它完成了什么? Service Bus 的哪些显着特点使它能够在Azure Storage queues do not 时支持“最多一次”交付?

【问题讨论】:

    标签: azure message-queue azureservicebus


    【解决方案1】:

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

    所以我联系了相关团队并确认它确实不正确。已提出 PR 以相应地修复文档。

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 2019-05-17
      • 2015-04-22
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多