一、三种交换机模式
核心区别对比
| 特性 | 广播模式(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动态匹配 |