Skip to Content
面试题库Message Queue[面试题] 普通消息和顺序消息的区别是什么?业务中有哪些强制要求顺序消费的场景?

[面试题] 普通消息和顺序消息的区别是什么?业务中有哪些强制要求顺序消费的场景?

📖 版块 A:知识讲解版 (温故知新)

区别:普通消息追求极致并发,写入哪个分区、被哪个线程消费都是随机的;顺序消息为了保证因果关系,强行将“相关联”的消息打入同一分区,并由单线程消费,牺牲了并发吞吐量。

应用场景

  1. 订单状态扭转:订单的创建 -> 支付 -> 发货 -> 确认收货,必须按此顺序。如果乱序,系统直接报错。
  2. 数据库Binlog同步:canal把MySQL的binlog推到MQ,同一条记录的 INSERT -> UPDATE -> DELETE,必须顺序执行,否则目标端数据就不一致了。

🎤 版块 B:面试实战版 (高手逐字稿)

Q:普通消息和顺序消息的区别是什么?业务中有哪些强制要求顺序消费的场景?

🧠 破局思路:点出两者在“并发”与“因果”上的取舍。举两个最典型的工业级例子(订单状态、Binlog)。

💬 高手逐字稿: 普通消息和顺序消息最大的区别在于对“并发”与“因果一致性”的取舍。普通消息是乱序的,追求极致的吞吐量。而顺序消息牺牲了局部并发,只为了保证事件发生的因果关系。

在实际业务中,最典型的场景就是订单的流转和数据库 Binlog 的同步。比如一笔订单,创建、付款、发货三条状态变更的消息,如果消费者先收到了“发货”消息,发现数据库里连订单都还没创建,业务直接就崩溃了。这时候我们就必须保证这三条消息不仅要发到同一个分区里,消费端也必须单线程按顺序执行。

最后更新于:
⏱️

登录后开始阅读

当前 MVP 版本只开放邮箱密码登录注册。完成登录后即可进入面试题内容。

还没有账号?先去注册