主题
概念卡片:RabbitMQ 工作模式
一句话机制:RabbitMQ 的「工作模式」本质是交换机类型 + 消费者数量的组合——用不用交换机、用什么交换机(fanout/direct/topic)、一个还是多个消费者,决定了消息是「一对一」「竞争消费」还是「广播」。
六种工作模式
| 模式 | 生产者/消费者 | 交换机 | 特点 |
|---|---|---|---|
| 简单模式 | 1 对 1 | 默认交换机(无需设置) | 点对点,最基本 |
| 工作队列 | 1 对多(竞争) | 默认交换机 | 多消费者抢消息,每条只被一个消费 |
| 发布/订阅 | 1 对多(广播) | fanout | 每个消费者都收到相同消息 |
| 路由模式 | 1 对多(按 key) | direct | 按 RoutingKey 精确路由到指定队列 |
| 主题模式 | 1 对多(通配) | topic | RoutingKey 通配符(*/#)匹配 |
| RPC 模式 | 请求/响应 | — | 远程过程调用,返回响应消息 |
关键区别速记
无交换机(默认)→ 简单模式 / 工作队列
fanout → 广播给所有绑定队列
direct → RoutingKey 精确匹配
topic → RoutingKey 通配符匹配(* 一段、# 多段)不变量(必须成立的约束)
- 简单/工作队列用默认交换机,无需显式建 Exchange;发布订阅/路由/主题必须显式建对应类型交换机。
- 工作队列是竞争消费:一条消息只被一个消费者处理,用于分摊任务。
- fanout 是广播:所有绑定队列都收到,用于日志/通知等多消费者同收场景。
踩坑案例
- 现象:想「一条消息多人都收到」,却用工作队列,结果消息被一个消费者抢走。 原因:工作队列是竞争关系。解决:改用 fanout 发布/订阅模式。
常见误解
- 以为「多消费者」就是广播 → 工作队列是多消费者竞争(一条消息只消费一次),广播要用 fanout。
- 以为所有模式都要建交换机 → 简单/工作队列用默认交换机,无需建。
关联
- 总览:消息队列技术栈总览
- 架构:概念卡片:RabbitMQ架构与核心组件
- 源:
B40-资源/语雀-Leo的知识库/微服务/03_RabbitMQ/_4_RabbitMQ工作模式(2 篇)