好的,阿杰,我们来整理一下 RabbitMQ 的五种主要消息模型,包括概念、适用场景、特点和示意图说明。
1️⃣ 简单队列模型(Simple Queue / Work Queue)
概念:
- 最基础的消息队列模型
- 一个生产者,一个队列,多个消费者
- 队列中的消息被一个消费者消费(竞争消费)
特点:
- 消息只能被一个消费者消费
- 消费者处理能力可通过增加实例扩展
应用场景:
- 异步任务处理
- 后台任务分发
示意图:
Producer ---> Queue ---> Consumer1
Consumer2
Consumer3
2️⃣ 发布/订阅模型(Fanout Exchange / Pub-Sub)
概念:
- 生产者发送消息到 Exchange
- Exchange 将消息广播到绑定的多个队列
- 每个队列的消费者都能收到消息
特点:
- 广播模式
- 消费者之间互相独立
- 不关心队列数量,Exchange 会自动分发
应用场景:
- 消息广播
- 日志推送
- 多系统同时接收同一条消息
示意图:
+------Queue1------> Consumer1
Producer -> Exchange (fanout)
+------Queue2------> Consumer2
+------Queue3------> Consumer3
3️⃣ 路由模型(Direct Exchange / Routing)
概念:
- 生产者发送消息到 Direct Exchange
- Exchange 根据 Routing Key 将消息路由到指定队列
特点:
- 精确路由
- 消息只发送给匹配的队列
应用场景:
- 按类型发送消息
- 分类通知、指令分发
示意图:
Producer --key: info--> Queue1 --> Consumer1
Producer --key: error--> Queue2 --> Consumer2
4️⃣ 主题模型(Topic Exchange)
概念:
- 类似 Direct Exchange,但路由键可以使用 通配符
*
匹配一个单词#
匹配多个单词
- 适用于更灵活的消息路由
特点:
- 灵活匹配
- 多对多路由
应用场景:
- 按业务模块、地域、等级分类消息
- 日志系统、事件订阅
示意图:
Routing Key: user.create
Topic Exchange --> Queue1 (user.*) --> Consumer1
Queue2 (#.create) --> Consumer2
5️⃣ 延迟/死信队列模型(Delay / Dead Letter Queue)
概念:
- 消息过期或被拒绝后,发送到 死信队列(DLQ)
- 可以实现消息延迟处理、定时任务
特点:
- 消息可延迟消费
- 可做重试、超时处理
应用场景:
- 延迟队列
- 订单超时未支付取消
- 消息重试机制
示意图:
Producer --> Queue (TTL) --> Dead Letter Exchange --> Dead Letter Queue --> Consumer
🔑 总结
模型 | 作用 | 消息分发方式 | 典型场景 |
---|---|---|---|
简单队列 | 异步任务 | 单一队列,竞争消费 | 后台任务处理 |
发布/订阅 | 广播消息 | Exchange 广播到多个队列 | 日志、广播通知 |
路由 | 精确路由 | 根据 Routing Key 发送到指定队列 | 分类指令、通知 |
主题 | 模糊路由 | 通配符匹配 Routing Key | 模块化事件订阅 |
延迟/死信 | 延迟/重试 | TTL + DLQ 机制 | 延迟任务、订单超时处理 |
发表回复