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 有哪些类型

必会

  • direct
  • fanout
  • topic
  • headers

场景理解

  • 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 个点

  1. exchange / queue / binding / routingKey
  2. 四种 exchange
  3. 消息可靠性
  4. ACK
  5. 重试
  6. 死信队列
  7. 延迟消息
  8. RabbitMQ 和 Kafka 区别