【发布时间】:2022-01-17 03:40:03
【问题描述】:
Messaging Provider 的一个选项是 Message Queue,它提供 FIFO 排序,即队列。为什么消息的顺序很重要?我想知道是不是因为消息的优先级或类似的原因。如果有人能举例说明,我将不胜感激。
【问题讨论】:
标签: data-structures design-patterns message-queue system-design
Messaging Provider 的一个选项是 Message Queue,它提供 FIFO 排序,即队列。为什么消息的顺序很重要?我想知道是不是因为消息的优先级或类似的原因。如果有人能举例说明,我将不胜感激。
【问题讨论】:
标签: data-structures design-patterns message-queue system-design
你的回答是对的——逻辑上有些操作是相互依赖的,你必须保持调用的顺序。
但我认为我想指出一个更重要的纯技术方面:您需要知道能够实现 ACID 事务的顺序。
以下面的场景为例:
您有一个流程服务,它协调 5 个其他实体/实用程序服务。该进程被触发并开始执行,但第三次调用失败。通常情况下,在服务之间拥有一个公共事务上下文(为了有两阶段提交)太昂贵了,所以解决方案是使用补偿,即调用所有服务的相反操作在失败之前已经进行了写操作。如果你不能保证消息的顺序,你就不可能知道你应该回滚什么,什么不应该(如果你没有明确地查看底层系统并自己跟踪更改——但这不是一个理智的方法)。
希望这会有所帮助!
【讨论】:
这是我为我的答案写的:
通过实现 Queue 数据结构,消费者将按照发送顺序接收消息。例如,企业系统中的订单系统向销售系统发送一些消息。让它们成为“GetPayment”和“Make a Shipment”。如果这些消息没有排队,销售系统可能会在“获取付款”之前通知“发货”而出现故障。
这个想法是维护企业级工作流程。
PS:普拉门有更深入的回答。
【讨论】:
首先进入消息缓冲区的任何内容都应首先提供。消息队列用于保留接收消息的顺序。队列是先进先出的。
【讨论】: