一、MQ 是什么?
MQ = Message Queue 消息队列
可以简单理解为:一个高效、可靠、异步的 "快递中转站"。
- 系统 A 把消息发给 MQ
- MQ 暂存消息
- 系统 B 从 MQ 慢慢取消息处理
- 本质:异步、解耦、削峰、缓冲。
二、为什么要用 MQ?(核心 4 大作用)
1. 异步(提速)
不用同步等待,主线程立刻返回。例如:
- 用户注册 → 发邮件 / 发短信
- 下单 → 扣库存、通知物流、积分增加
不用等全部做完才返回,用户体验极快。
2. 解耦(系统不互相绑定)
A 系统不直接调用 B、C、D,只发 MQ。B、C、D 自己订阅消费。
新增系统不用改 A 代码,架构更干净。
3. 削峰(抗高并发)
秒杀、双十一流量暴涨:
- 直接打数据库 → 崩溃
- 进 MQ → 慢慢消费
保护下游服务不被冲垮。
4. 最终一致性(分布式事务)
分布式系统无法用本地事务,用 MQ 保证:
- 订单创建成功
- 库存一定扣
- 日志一定记
最终数据一致。
三、市面上常用 MQ 对比(必背)
1. RabbitMQ
- 语言:Erlang
- 优点:稳定、可靠、功能全(延时、死信、路由、ACK)
- 缺点:吞吐量中等
- 适合:企业级微服务、订单、支付、可靠消息
2. RocketMQ(阿里)
- 优点:高吞吐、高可用、海量消息
- 适合:电商、秒杀、大数据、高并发
3. Kafka
- 优点:超高吞吐、日志、流处理
- 适合:日志收集、用户行为、大数据实时计算
4. ActiveMQ
- 老、重,现在很少用
四、MQ 最经典使用场景(工作 90% 都这些)
1. 异步通知(最常用)
- 用户注册成功 → 发送短信 / 邮件
- 订单支付成功 → 推送 APP、公众号通知
- 商品评价 → 增加积分
主线程不等待,直接返回。
2. 订单系统(核心场景)
- 创建订单 → 发送 MQ
- 库存系统扣减
- 物流系统创建物流单
- 积分系统增加积分
- 风控系统检查
解耦 + 异步 + 最终一致性
3. 延迟任务(必须会)
- 订单30 分钟未支付,自动取消
- 收货后 7 天自动确认
- 预约任务定时执行
RabbitMQ 死信队列 / RocketMQ 延迟等级
4. 秒杀 / 高并发削峰
- 秒杀 1 秒几千请求
- 直接进 MQ,消费者慢慢处理
- 防止数据库、服务被冲垮
5. 日志 / 大数据采集
- 服务日志、用户行为日志
- 大量写入 → Kafka
- 后续做实时计算、离线分析
6. 分布式事务最终一致性
- 订单 + 库存 + 支付 跨服务
- 用 可靠消息 + 重试 + 幂等 保证最终一致
7. 系统解耦
- 商品上下架 → 通知搜索服务重建索引
- 价格变更 → 通知缓存服务更新
- A 系统不直接调用 B,只发 MQ
8. 流量控制、限流
- 下游处理慢,MQ 缓冲
- 消费者
prefetch控制拉取速度
五、一句话总结
MQ 就是用来:异步、解耦、削峰、保证最终一致性的中间件,解决高并发、分布式系统的同步耦合与性能问题。