目录
一、三种交换机模式
核心区别对比
2. 详细说明
(1) 广播模式(Fanout)
(2) 路由模式(Direct)
(3) 主题模式(Topic)
3. 不同消息队列的实现
4. 如何选择?
5.java代码实现(生产者)
总结
二、RabbitMQ对应的工作模式
1. 简单模式(Simple)
2. 工作队列模式(Work Queue)
3. 发布/订阅模式(Pub/Sub)
4. 路由模式(Routing)
5. 通配符模式(Topics)
三、总结对应关系
一、三种交换机模式
核心区别对比
特性 |
广播模式(Fanout) |
路由模式(Direct) |
主题模式(Topic) |
路由规则 |
无条件复制到所有绑定队列 |
精确匹配 Routing Key |
通配符匹配 Routing Key (* /# ) |
消息分发 |
1:N(所有消费者收到相同消息) |
1:1 或 1:N(相同 Key 的队列) |
M:N(灵活匹配多个队列) |
典型应用场景 |
系统通知、多服务数据同步 |
任务分发、精确路由(如支付处理) |
分类事件(如日志分级、新闻订阅) |
Exchange 类型 |
Fanout Exchange (RabbitMQ) |
Direct Exchange |
Topic Exchange |
Routing Key |
忽略 |
必须完全匹配 |
支持通配符(如 news.* ) |
2. 详细说明
(1) 广播模式(Fanout)
- 核心逻辑:
消息发送到 Fanout Exchange
后,会无条件复制到所有绑定的队列,消费者订阅不同队列时会收到相同消息。
- 示例场景:
- 系统公告:一条消息需同时触发邮件、短信、日志服务。
- 数据同步:订单创建后广播给库存、物流、分析服务。
- 特点:
- 简单粗暴,无过滤逻辑。
- 性能开销较大(消息全量复制)。
(2) 路由模式(Direct)
- 核心逻辑:
消息通过精确的 Routing Key
匹配到指定队列,只有绑定相同 Key 的消费者能收到消息。
- 示例场景:
- 支付处理:
routing_key=payment.success
仅路由到支付服务队列。
- 任务分发:多个 worker 竞争消费同一队列(工作队列模式)。
- 特点:
- 精准控制消息接收方。
- 灵活性较低(需提前定义 Key)。
(3) 主题模式(Topic)
- 核心逻辑:
通过通配符(*
匹配一个单词,#
匹配多级)动态匹配 Routing Key
,实现灵活的路由。
- 示例场景:
- 日志分级:
log.error
路由到告警服务,log.info
路由到存储服务。
- 新闻订阅:用户订阅
news.sports
或 news.weather
。
- 特点:
- 兼顾广播的覆盖范围和路由的精确性。
- 适合多维度、分层级的消息分类。
3. 不同消息队列的实现
MQ 类型 |
广播模式 |
路由模式 |
主题模式 |
RabbitMQ |
Fanout Exchange |
Direct Exchange |
Topic Exchange |
Kafka |
多个 Consumer Group 独立消费 |
单 Partition 或 Key 路由 |
Topic + 通配符订阅 |
RocketMQ |
广播消费(Broadcasting) |
Tag 过滤(精确匹配) |
Tag 过滤(通配符支持) |
4. 如何选择?
- 需要无条件广播? → Fanout(如全量数据同步)。
- 需要精确路由? → Direct(如支付结果处理)。
- 需要动态分类? → Topic(如日志分级、多维度事件)。
5.java代码实现(生产者)

总结
- 广播模式:简单粗暴,适合全覆盖场景。
- 路由模式:精准控制,适合点对点或任务分发。
- 主题模式:灵活匹配,适合复杂分类和订阅需求。
二、RabbitMQ对应的工作模式
1. 简单模式(Simple)
- 对应机制:
- 交换机类型:默认使用默认交换机(
""
,无名交换机),类型为direct
。
- 特点:生产者直接将消息发送到队列(通过默认交换机绑定队列),消费者从队列中读取消息。
- 关系:无需显式声明交换机,消息通过队列名直接路由(
routing_key
= 队列名)。
2. 工作队列模式(Work Queue)
- 对应机制:
- 交换机类型:同样使用默认交换机(
direct
)。
- 特点:多个消费者共享一个队列,消息以轮询(Round-Robin)或公平分发的方式分配给消费者。
- 关系:与简单模式类似,但通过多个消费者实现负载均衡。交换机类型不直接影响分发逻辑(由队列自身管理)。
3. 发布/订阅模式(Pub/Sub)
- 对应机制:
- 交换机类型:必须使用
fanout
交换机。
- 特点:消息会被广播到所有绑定的队列(每个队列的消费者都会收到相同消息)。
- 关系:
fanout
交换机忽略routing_key
,直接将消息复制到所有绑定的队列,实现广播。
4. 路由模式(Routing)
- 对应机制:
- 交换机类型:必须使用
direct
交换机。
- 特点:消息根据
routing_key
精确匹配队列,只有匹配的队列会接收消息。
- 关系:
direct
交换机通过routing_key
的完全匹配决定消息路由,适合定向分发。
5. 通配符模式(Topics)
- 对应机制:
- 交换机类型:必须使用
topic
交换机。
- 特点:消息根据
routing_key
的模式匹配(支持通配符*
和#
)分发到队列。
- 关系:
topic
交换机通过灵活的路由规则实现部分匹配,适合多维度条件路由。
三、总结对应关系
模式名称 |
对应Exchange类型 |
Routing Key规则 |
分发逻辑 |
简单模式 |
(无,直连队列) |
队列名作为隐式Key |
1:1点对点 |
工作队列模式 |
Direct(隐式) |
队列名作为隐式Key |
1:N竞争消费 |
发布/订阅模式 |
Fanout |
忽略 |
1:N广播 |
路由模式 |
Direct |
精确匹配 |
1:1或1:N(相同Key) |
通配符模式 |
Topic |
* 或# 通配符 |
M:N动态匹配 |