【问题标题】:Why is Queue/FIFO ordering important in Message Queue?为什么队列/FIFO 排序在消息队列中很重要?
【发布时间】:2022-01-17 03:40:03
【问题描述】:

Messaging Provider 的一个选项是 Message Queue,它提供 FIFO 排序,即队列。为什么消息的顺序很重要?我想知道是不是因为消息的优先级或类似的原因。如果有人能举例说明,我将不胜感激。

【问题讨论】:

    标签: data-structures design-patterns message-queue system-design


    【解决方案1】:

    你的回答是对的——逻辑上有些操作是相互依赖的,你必须保持调用的顺序。

    但我认为我想指出一个更重要的纯技术方面:您需要知道能够实现 ACID 事务的顺序。

    以下面的场景为例:

    您有一个流程服务,它协调 5 个其他实体/实用程序服务。该进程被触发并开始执行,但第三次调用失败。通常情况下,在服务之间拥有一个公共事务上下文(为了有两阶段提交)太昂贵了,所以解决方案是使用补偿,即调用所有服务的相反操作在失败之前已经进行了写操作。如果你不能保证消息的顺序,你就不可能知道你应该回滚什么,什么不应该(如果你没有明确地查看底层系统并自己跟踪更改——但这不是一个理智的方法)。

    希望这会有所帮助!

    【讨论】:

    • 我完全明白你在说什么。这让现在更清楚了。感谢朋友的帮助。
    【解决方案2】:

    这是我为我的答案写的:

    通过实现 Queue 数据结构,消费者将按照发送顺序接收消息。例如,企业系统中的订单系统向销售系统发送一些消息。让它们成为“GetPayment”和“Make a Shipment”。如果这些消息没有排队,销售系统可能会在“获取付款”之前通知“发货”而出现故障。

    这个想法是维护企业级工作流程。

    PS:普拉门有更深入的回答。

    【讨论】:

      【解决方案3】:

      首先进入消息缓冲区的任何内容都应首先提供。消息队列用于保留接收消息的顺序。队列是先进先出的。

      【讨论】:

      • 感谢您的回答,我正在寻找企业系统观点的答案,而不是技术。再次感谢您。
      猜你喜欢
      • 2011-08-02
      • 2013-10-14
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2018-08-29
      • 2017-12-06
      相关资源
      最近更新 更多