Skip to content

🐇 RabbitMQ 知识文库

定位:大厂 Java 面试 · 消息中间件核心知识体系 协议:AMQP 0-9-1(Advanced Message Queuing Protocol) 语言:Erlang/OTP 实现,天然高并发


📖 文库导航

#主题面试频率链接
01**RabbitMQ基础与核心概念**⭐⭐⭐⭐⭐架构模型、核心组件、AMQP 协议
02**交换机类型与路由策略**⭐⭐⭐⭐⭐Direct / Fanout / Topic / Headers
03**消息可靠性保障**⭐⭐⭐⭐⭐Confirm / Return / ACK / 持久化
04**死信队列与延迟队列**⭐⭐⭐⭐DLX、TTL、延迟消息实现
05**消息幂等性与重复消费**⭐⭐⭐⭐去重表、幂等设计、唯一ID
06**消息积压与消费能力**⭐⭐⭐⭐堆积处理、扩容策略、背压
07**集群与高可用架构**⭐⭐⭐⭐镜像队列、仲裁队列、Quorum
08**SpringBoot整合RabbitMQ**⭐⭐⭐⭐⭐@RabbitListener、配置、重试
09**RabbitMQ面试高频题汇总**⭐⭐⭐⭐⭐TOP 30 高频面试题速查

🧠 知识全景图

                        ┌─────────────────────────────────┐
                        │         RabbitMQ 核心架构         │
                        └───────────────┬─────────────────┘
              ┌─────────────┬───────────┼───────────┬─────────────┐
              ▼             ▼           ▼           ▼             ▼
         ┌────────┐   ┌─────────┐  ┌────────┐  ┌─────────┐  ┌─────────┐
         │ Producer│   │ Exchange│  │ Queue  │  │Consumer │  │  Broker │
         │ 生产者  │──▶│  交换机  │─▶│  队列  │─▶│  消费者  │  │  服务器  │
         └────────┘   └─────────┘  └────────┘  └─────────┘  └─────────┘
                         │           │
                    ┌────┴────┐  ┌───┴───┐
                    │ Routing │  │Binding│
                    │  Key    │  │ 绑定   │
                    └─────────┘  └───────┘

🔑 核心考点速记

1. 为什么用 RabbitMQ?(对比 Kafka / RocketMQ)

维度RabbitMQKafkaRocketMQ
协议AMQP自定义协议自定义协议
延迟微秒级毫秒级毫秒级
吞吐万级/s百万级/s十万级/s
消息可靠最高(confirm+持久化+ACK)高(ISR+ACK)高(同步刷盘)
消息模型Queue + ExchangeTopic + PartitionTopic + Queue
适用场景业务解耦、延迟任务、复杂路由日志收集、大数据流电商交易、事务消息
语言ErlangScala/JavaJava

2. RabbitMQ 核心角色

Producer → Connection → Channel → Exchange → (Binding + RoutingKey) → Queue → Channel → Connection → Consumer
  • Producer:消息生产者,发送消息到 Exchange
  • Exchange:交换机,根据路由规则分发消息到 Queue
  • Queue:消息存储容器,FIFO
  • Binding:绑定关系,连接 Exchange 和 Queue
  • RoutingKey:路由键,Producer 发送时指定
  • BindingKey:绑定键,Queue 绑定时指定
  • Consumer:消息消费者,从 Queue 拉取/推送消息
  • Channel:信道,复用 TCP 连接的虚拟连接
  • Connection:TCP 长连接

3. 消息流转全链路

Producer


Connection (TCP)


Channel (虚拟连接,减少 TCP 开销)


Exchange (路由分发)
   │  ┌─ Direct:精确匹配 routing_key
   │  ├─ Fanout:广播到所有绑定队列
   │  ├─ Topic:通配符匹配(* 一个词,# 零或多个词)
   │  └─ Headers:根据消息 header 属性匹配

Queue (存储 + 投递)


Consumer (ACK 确认消费)

📌 面试黄金公式

被问"你们怎么用 RabbitMQ"时的标准回答模板:

1. 业务场景:为什么引入 MQ(解耦/异步/削峰)
2. 技术选型:为什么选 RabbitMQ 而不是 Kafka/RocketMQ
3. 核心设计:Exchange 类型 + RoutingKey 设计 + Queue 规划
4. 可靠性:生产端 confirm + 消费端手动 ACK + 消息持久化
5. 异常处理:死信队列兜底 + 重试机制 + 告警通知
6. 监控运维:管理界面 + 告警阈值 + 消息堆积监控

📚 参考资源

Knowledge4J — Java 知识库