V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
falsemask
V2EX  ›  问与答

关于 RocketMQ 顺序消息的疑问

  •  
  •   falsemask · 31 天前 · 613 次点击

    1711538972172.png https://rocketmq.apache.org/zh/docs/featureBehavior/03fifomessage/ 这里的单一生产者指的是单个线程吗?生产都是多实例部署的,如果用户先发起一个下单请求,再发起支付请求,这两个请求都需要发送 MQ 消息。这两个请求被不同的机器处理,用户肯定是先下单再支付的,但是如何保证这两条 MQ 消息也是有序的?

    1 条回复    2024-03-27 20:39:16 +08:00
    NizumaEiji
        1
    NizumaEiji  
       31 天前   ❤️ 1
    看 rocketmq 的代码。
    发送者的有序是发送者实现的,具体就是根据你的提供的一个分区 key 进行 hash ,然后和具体的逻辑队列数取余,来保证相同分区 key 都发送到一个逻辑队列上。
    所以我理解这种顺序是完全取决于你的消息发送的频率,还有一对顺序消息的严格程度的。你的消息发送频率不高,对于顺序消息的严格程度要求也不高,那多个 jvm 实例并行发送也没啥问题。如果你对顺序严格程度要求高,发送消息的频率要大,那甚至需要你的 mq 发送者单例并且加锁来保证。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   965 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:51 · PVG 06:51 · LAX 15:51 · JFK 18:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.