软考高级系统架构师之消息队列:RabbitMQ & RocketMQ
·
系统架构师学习平台(点击这里进入)
本质:一个高性能的“异步中转站”。
二、核心技术特点
- 异步处理:无需同步等待,主线程立即返回
- 应用解耦:服务间不直接调用,通过消息通信
- 流量削峰:高并发请求入队,消费者匀速处理
- 异步通知/最终一致性:支持分布式事务
- 广播、重试、死信队列、延时消息
- 高可用、持久化,节点宕机不丢消息
三、核心应用场景
- 异步处理:注册后发积分、短信、优惠券
- 应用解耦:订单、支付、物流系统通过 MQ 通信
- 秒杀削峰:瞬间流量入队,保护数据库
- 分布式事务:订单支付后通知库存、物流
- 日志收集与流式处理:日志 → Kafka → Flink/ES
- 延时任务:订单超时未支付自动取消
四、优点 & 缺点
优点
- 系统解耦,扩展性极强
- 接口性能大幅提升(异步化)
- 削峰填谷,保护下游系统
- 分布式系统标准通信方案
- 可重试、可回溯、可监控
缺点
- 系统复杂度变高,需保证消息可靠性
- 数据为最终一致性,非强一致
- 可能出现重复消费,需保证幂等性
- 可能消息丢失,需持久化与确认机制
- 可能消息堆积,导致系统阻塞
- 增加部署、监控、高可用运维成本
五、常见 MQ 对比
| 特性 | RabbitMQ | RocketMQ | Kafka |
|---|---|---|---|
| 开发语言 | Erlang | Java | Scala/Java |
| 吞吐量 | 中 | 高 | 极高 |
| 延时消息 | 支持(死信) | 支持 18 个等级 | 不直接支持 |
| 事务消息 | 不支持 | 支持 | 不支持 |
| 复杂度 | 低 | 中 | 高 |
| 适用场景 | 通用业务、解耦、异步 | 电商、金融、高可靠 | 日志、流计算、大数据 |
六、一句话总结
MQ = 异步 + 解耦 + 削峰 + 最终一致性
优点:让系统更稳、更快、更易扩展
缺点:增加复杂度,必须处理:重复消费、丢失、堆积、幂等
七、MQ 高频面试 20 题(精简版)
基础概念
- 三大核心:异步、解耦、削峰
- 缺点:复杂度高、消息问题、最终一致、运维成本
- RabbitMQ 易用稳定;RocketMQ 高可靠;Kafka 高吞吐
- Push 实时性高;Pull 可控性强
消息丢失
- 丢失阶段:生产者→MQ、MQ 内存、消费者未处理
- 生产者:confirm 机制、回调重试
- MQ 服务端:持久化、集群、落盘 ACK
- 消费者:先处理业务,再手动 ACK
重复消费与幂等性
- 原因:网络抖动、超时、重启、重试
- 方案:唯一索引、Redis 判重、状态机、分布式锁
- 幂等性:多次执行结果与一次相同
消息堆积
- 解决:排查错误、扩容消费者、优化逻辑
- 原因:消费慢、阻塞、数量不足、无限重试
- 后果:磁盘满、无法写入、系统雪崩
延时消息 & 死信队列
- 延时场景:订单取消、自动确认、验证码失效
- 死信:消息被拒、过期、队列满,用于日志与重试
分布式事务 & 高可用
- 事务:可靠消息+最终一致性,RocketMQ 支持事务消息
- 高可用:集群、主从、持久化、副本
- Kafka 快:顺序写、页缓存、零拷贝、批量、分区并行
更多推荐



所有评论(0)