Azure 服务总线的 "at most once" 交付能力的实际意义、价值和用途是什么?
What is the actual meaning, value and usage of Azure Service Bus' "at most once" delivery capability?
服务总线documentation states that "the At-Most-Once semantic can be supported by using session state to store the application state and by using transactions to atomically receive messages and update the session state." "Session" here appears to refer to Service Bus' messaging sessions,其中包括存储任意状态的能力。此机制允许您在事务中注册状态更新以及对消息的操作。
我知道如何使用它来可靠地维护使用消息会话的应用程序的状态。如果您可以更新应用程序状态并在同一事务中完成消息,则正确实现的应用程序可能会在执行过程中的任何地方死掉,并且在恢复时将保证继承导致成功、有序的持续会话处理的状态(示例代码是 here, though strangely it doesn't actually use transactions,虽然我知道它是如何实现的以及它会完成什么)。
我看不到这些如何转化为 "at-most-once" 交付。服务总线的任何内容(包括会话状态的更新)都不能注册到分布式事务中。那么 "at-most-once" 到底是什么意思,它有什么作用呢? Service Bus 的什么显着特征允许它在 Azure Storage queues do not 时支持 "at-most-once" 交付?
在查看了您的 post 并通读了文档之后,我意识到它并没有真正解释 at-most-once
。
所以我联系了相关团队并确认它确实不正确。已提出 PR 以相应地修复文档。
相反,会话和事务一起提供了更高级别的一致性,这通常被称为 exactly-once
处理(仅靠消息代理本身并不能真正实现这一点,而是与一个能够重复数据删除)。
PS:at-most-once
确实可以通过简单地使用ReceiveAndDelete
模式
服务总线documentation states that "the At-Most-Once semantic can be supported by using session state to store the application state and by using transactions to atomically receive messages and update the session state." "Session" here appears to refer to Service Bus' messaging sessions,其中包括存储任意状态的能力。此机制允许您在事务中注册状态更新以及对消息的操作。
我知道如何使用它来可靠地维护使用消息会话的应用程序的状态。如果您可以更新应用程序状态并在同一事务中完成消息,则正确实现的应用程序可能会在执行过程中的任何地方死掉,并且在恢复时将保证继承导致成功、有序的持续会话处理的状态(示例代码是 here, though strangely it doesn't actually use transactions,虽然我知道它是如何实现的以及它会完成什么)。
我看不到这些如何转化为 "at-most-once" 交付。服务总线的任何内容(包括会话状态的更新)都不能注册到分布式事务中。那么 "at-most-once" 到底是什么意思,它有什么作用呢? Service Bus 的什么显着特征允许它在 Azure Storage queues do not 时支持 "at-most-once" 交付?
在查看了您的 post 并通读了文档之后,我意识到它并没有真正解释 at-most-once
。
所以我联系了相关团队并确认它确实不正确。已提出 PR 以相应地修复文档。
相反,会话和事务一起提供了更高级别的一致性,这通常被称为 exactly-once
处理(仅靠消息代理本身并不能真正实现这一点,而是与一个能够重复数据删除)。
PS:at-most-once
确实可以通过简单地使用ReceiveAndDelete
模式