🐇 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)
| 维度 | RabbitMQ | Kafka | RocketMQ |
|---|---|---|---|
| 协议 | AMQP | 自定义协议 | 自定义协议 |
| 延迟 | 微秒级 | 毫秒级 | 毫秒级 |
| 吞吐 | 万级/s | 百万级/s | 十万级/s |
| 消息可靠 | 最高(confirm+持久化+ACK) | 高(ISR+ACK) | 高(同步刷盘) |
| 消息模型 | Queue + Exchange | Topic + Partition | Topic + Queue |
| 适用场景 | 业务解耦、延迟任务、复杂路由 | 日志收集、大数据流 | 电商交易、事务消息 |
| 语言 | Erlang | Scala/Java | Java |
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. 监控运维:管理界面 + 告警阈值 + 消息堆积监控