RabbitMQ 八股题库
你可能没有 Kafka 那么深的 RabbitMQ 生产实战,但面试里还是要准备到“能讲清楚原理、适用场景和与 Kafka 的区别”。
一、RabbitMQ 面试里你的最佳姿势
如果实战不如 Kafka 深,不要硬吹。更稳的表达是:
RabbitMQ 我理解它的核心优势在于消息模型和路由能力更灵活,适合业务通知、任务分发、复杂路由这类场景。和 Kafka 相比,我更熟 Kafka 在高吞吐事件链路里的使用,但 RabbitMQ 的原理和典型场景我理解是清楚的。
二、高频题
1. RabbitMQ 核心概念有哪些
必会
- producer
- consumer
- exchange
- queue
- binding
- routingKey
- vhost
标准回答
RabbitMQ 的核心是生产者把消息发到 exchange,由 exchange 根据规则路由到 queue,再由 consumer 消费。
2. exchange 有哪些类型
必会
directfanouttopicheaders
场景理解
- direct:精确匹配 routingKey
- fanout:广播
- topic:通配符匹配
- headers:按 header 匹配,实际用得少
3. RabbitMQ 为什么适合复杂路由
因为它把“消息接收方是谁”这件事抽象到了 exchange + binding 上,消息路由方式更灵活。
4. RabbitMQ 如何保证消息可靠性
标准回答
通常要同时考虑:
- 生产者确认
- 消息持久化
- 队列持久化
- 消费者 ACK
- 失败重试 / 死信机制
面试更稳的说法
可靠性不是单点配置,而是生产、存储、消费三段都要考虑。
5. ACK 和自动确认有什么区别
标准回答
- 自动确认:消息推给消费者后立即认为消费成功,风险高
- 手动 ACK:业务处理完成后显式确认,可靠性更高
面试更稳的说法
真正线上业务一般更偏手动 ACK。
6. RabbitMQ 如何做重试
常见方式:
- nack / requeue
- 延迟队列
- 死信队列
- 重试次数控制
面试更稳的说法
不能无限重试,尤其是不可恢复错误,要尽快落死信并报警。
7. 什么是死信队列
标准回答
消息因为被拒绝、过期、队列满等原因无法正常消费时,可以进入死信交换机和死信队列,后续做排查或补偿。
8. RabbitMQ 如何做延迟消息
常见方案
- TTL + 死信队列
- 延迟消息插件
对比说法
如果业务量中等、路由复杂、延迟任务不算特别大,RabbitMQ 可以做;大吞吐时间事件场景则要结合实际选型。
9. RabbitMQ 和 Kafka 有什么区别
标准回答
- RabbitMQ 更适合业务消息、复杂路由、任务分发
- Kafka 更适合大吞吐事件流、日志流和数据链路
你可以更具体一点
- RabbitMQ 更关注“消息准确送达和灵活路由”
- Kafka 更关注“高吞吐、可扩展和顺序日志”
10. 什么场景更适合 RabbitMQ
适合
- 业务通知
- 订单状态通知
- 邮件短信任务
- 任务分发
- 复杂路由
不一定最合适
- 超大吞吐埋点流
- 海量行为数据流
三、如果面试官问你项目里为什么没主打 RabbitMQ
你可以答:
我的核心高并发数据链路主要落在 Kafka 上,因为推广和 ROI 场景里原始事件和行为数据量更大,更适合 Kafka 这种高吞吐事件流模型。RabbitMQ 我理解它更适合业务通知、任务分发和复杂路由,这块如果放到订单消息、异步通知这类业务里是很常见的。
四、你复习 RabbitMQ 最该背的 8 个点
- exchange / queue / binding / routingKey
- 四种 exchange
- 消息可靠性
- ACK
- 重试
- 死信队列
- 延迟消息
- RabbitMQ 和 Kafka 区别