消息队列基础概念【二、Topic vs Queue 发布/订阅与点对点模式】
一、概念区分
| 特性 | Queue(点对点) | Topic(发布/订阅) |
|---|---|---|
| 消息模式 | 点对点 | 发布/订阅 |
| 消息消费 | 一个消息只能被一个消费者消费 | 一个消息可以被多个订阅者消费 |
| 消费者关系 | 消费者竞争队列中的消息 | 消费者独立订阅 Topic,可接收全部消息 |
| 典型场景 | 任务分发、削峰填谷 | 广播通知、事件推送、日志广播 |
| 示意 | 单个消息 → 单个消费者 | 单个消息 → 多个订阅者 |
二、点对点模式(Queue)
1. 工作原理
- **生产者(Producer)**发送消息到 队列(Queue)。
- 队列保证 消息顺序(FIFO),存储未被消费的消息。
- **消费者(Consumer)**从队列拉取消息,消费后发送 ACK 确认。
- 同一条消息只会被 一个消费者消费,其他消费者无法重复消费。
2. 优点
- 负载均衡天然实现:多消费者同时消费队列,消息自动分发。
- 消息不丢失:结合持久化和 ACK 机制。
- 简单直观,适合任务调度、后台异步处理。
3. 缺点
- 无法广播消息,适用场景有限。
- 消费者数量增加时,消息分发仍需协调队列容量和顺序。
4. 典型应用场景
- 异步任务处理(如订单处理、邮件发送)
- 流量削峰填谷(高并发请求排队)
- 后台批量处理任务
三、发布/订阅模式(Topic)
1. 工作原理
- 生产者将消息发送到 Topic/Exchange。
- 多个消费者订阅 Topic 或绑定队列。
- 消息被 复制到所有订阅者 队列,保证每个订阅者都能接收到消息。
2. 优点
- 广播能力强:消息可同时送达多个系统或应用。
- 订阅者独立:新增消费者无需影响其他消费者。
- 支持复杂路由:可结合 Tag/Filter/Topic 匹配消息。
3. 缺点
- 消息量大时,占用存储资源增加。
- 消费者处理速度慢可能导致消息积压,需要合理流控。
4. 典型应用场景
- 事件通知系统(订单创建事件通知多系统)
- 日志收集与监控(日志广播到多个分析系统)
- 消息推送(App 通知、系统广播)
四、示意图(Mermaid)
1. Queue 模式
消息在队列中由消费者竞争消费,每条消息只会被 一个消费者处理。
2. Topic 模式
每条消息被 复制到所有订阅者,保证广播能力。
五、Queue vs Topic 总结
| 特性 | Queue | Topic |
|---|---|---|
| 消息消费 | 单消费 | 多消费 |
| 消息顺序 | FIFO | 可顺序或无序(取决于队列) |
| 消费者关系 | 竞争 | 订阅 |
| 典型场景 | 异步任务、削峰填谷 | 广播通知、日志/事件流 |
| 优势 | 负载均衡、任务分发 | 广播、灵活路由 |
| 劣势 | 无法广播 | 消费者慢会积压 |
本文来自博客园,作者:NeoLshu,转载请注明原文链接:https://www.cnblogs.com/neolshu/p/19120323

浙公网安备 33010602011771号