RabbitMQ介绍(异步处理中间件)
RabbitMQ 是一个开源的 消息中间件(Message Broker),用于在分布式系统中实现异步通信、解耦、削峰填谷等核心能力。
其核心本质: 通过“消息”作为中介,实现服务之间的松耦合通信机制
1.核心协议与实现
- 基于协议:AMQP(Advanced Message Queuing Protocol)
- 语言实现:Erlang(高并发、高可靠)
- 特点:
- 天然支持分布式
- 高可用(HA)
- 高吞吐(适中,非极限型)
2. RabbitMQ 核心架构
2.1 架构模型
flowchart LR
P[Producer] --> E[Exchange]
E --> Q[Queue]
Q --> C[Consumer]
E -->|Routing Key| Q
2.2 组件说明
| 组件 | 作用 |
|---|---|
| Producer | 消息生产者 |
| Exchange | 消息路由中心 |
| Queue | 消息存储队列 |
| Consumer | 消费者 |
| Binding | Exchange 与 Queue 的绑定规则 |
2.3 Exchange 类型(关键)
| 类型 | 路由规则 | 场景 |
|---|---|---|
| direct | 精确匹配 routing key | RPC / 精准投递 |
| fanout | 广播 | 日志分发 |
| topic | 通配符匹配 | 复杂路由(推荐) |
| headers | header匹配 | 较少使用 |
3. 工作流程
3.1 消息流转流程
sequenceDiagram
participant P as Producer
participant E as Exchange
participant Q as Queue
participant C as Consumer
P->>E: 发送消息
E->>Q: 路由消息
Q->>C: 投递消息
C->>Q: ACK确认
4. 核心特性
4.1 解耦
- 服务之间不直接调用
- 降低系统耦合度
4.2 异步处理
- 提升系统吞吐
- 减少响应时间
4.3 削峰填谷
graph LR
A[高峰流量] --> B[Queue缓冲]
B --> C[后台慢慢消费]
4.4 可靠性机制
| 机制 | 说明 |
|---|---|
| ACK | 消费确认 |
| 持久化 | 队列/消息持久化 |
| Publisher Confirm | 生产者确认 |
| Dead Letter Queue | 死信队列 |
| Retry | 重试机制 |
5. 高级机制(生产环境关键)
5.1 死信队列(DLQ)
触发条件:
- 消费失败(reject / nack)
- TTL过期
- 队列满
5.2 延迟队列
实现方式:
- TTL + DLX(推荐)
- 插件:rabbitmq_delayed_message_exchange
5.3 消息顺序性
RabbitMQ 默认 不保证全局顺序
可通过:
- 单队列 + 单消费者
- 或业务层控制
5.4 消息幂等性(必须)
常见方案:
- 唯一ID去重
- Redis 去重
- 数据库幂等表
6. RabbitMQ vs Kafka
| 维度 | RabbitMQ | Kafka |
|---|---|---|
| 模型 | Broker + Queue | Log |
| 顺序性 | 弱 | 强(分区内) |
| 吞吐量 | 中等 | 极高 |
| 延迟 | 低 | 较低 |
| 使用复杂度 | 低 | 较高 |
| 场景 | 业务解耦 | 大数据流 |
7.总结
RabbitMQ = 可靠消息分发系统(解耦 + 异步 + 削峰)