为什么 Queue/FIFO 排序在 Message Queue 中很重要?
Why is Queue/FIFO ordering important in Message Queue?
Messaging Provider 的一个选项是 Message Queue,它提供 FIFO 排序,即队列。为什么消息的顺序很重要?我想知道是不是因为消息的优先级或类似的原因。如果有人能举例说明,我将不胜感激。
首先进入消息缓冲区的任何内容都应首先提供。消息队列用于保留接收消息的顺序。队列是先进先出的。
以下是我的回答:
通过实施队列数据结构,消费者将按发送顺序接收消息。例如,企业系统中的订单系统向销售系统发送一些消息。让它们成为 "GetPayment" 和 "Make a Shipment"。如果这些消息未排队,销售系统可能会在 "Getting a Payment".
之前通知 "Make a Shipment" 发生故障
想法是维护企业级工作流程。
PS: Plamen 有更深入的回答。
您的回答是正确的 - 逻辑上一些操作是相互依赖的,您必须保持调用顺序。
但我认为还有一个更重要的纯技术方面我想指出:您需要知道顺序才能实现 ACID 事务。
采用以下场景:
您有一个流程服务可以协调 5 个其他 entity/utility 服务。该进程被触发并开始执行,但第 3 次调用失败。通常情况下,在服务之间有一个共同的事务上下文(为了有两阶段提交)太昂贵了,所以解决方案是使用 Compensation 即调用相反的操作在失败之前已经执行写操作的所有服务。如果你不能保证消息的顺序,你就不可能知道你应该回滚什么,什么不应该(如果你没有明确地查看底层系统并自己跟踪更改 - 但这不是一个明智的方法)。
希望对您有所帮助!
Messaging Provider 的一个选项是 Message Queue,它提供 FIFO 排序,即队列。为什么消息的顺序很重要?我想知道是不是因为消息的优先级或类似的原因。如果有人能举例说明,我将不胜感激。
首先进入消息缓冲区的任何内容都应首先提供。消息队列用于保留接收消息的顺序。队列是先进先出的。
以下是我的回答:
通过实施队列数据结构,消费者将按发送顺序接收消息。例如,企业系统中的订单系统向销售系统发送一些消息。让它们成为 "GetPayment" 和 "Make a Shipment"。如果这些消息未排队,销售系统可能会在 "Getting a Payment".
之前通知 "Make a Shipment" 发生故障想法是维护企业级工作流程。
PS: Plamen 有更深入的回答。
您的回答是正确的 - 逻辑上一些操作是相互依赖的,您必须保持调用顺序。
但我认为还有一个更重要的纯技术方面我想指出:您需要知道顺序才能实现 ACID 事务。
采用以下场景:
您有一个流程服务可以协调 5 个其他 entity/utility 服务。该进程被触发并开始执行,但第 3 次调用失败。通常情况下,在服务之间有一个共同的事务上下文(为了有两阶段提交)太昂贵了,所以解决方案是使用 Compensation 即调用相反的操作在失败之前已经执行写操作的所有服务。如果你不能保证消息的顺序,你就不可能知道你应该回滚什么,什么不应该(如果你没有明确地查看底层系统并自己跟踪更改 - 但这不是一个明智的方法)。
希望对您有所帮助!