怎么理解"扇出"
核心就一句话:把一份东西,原封不动地复制成多份,分发给多个下游。
[ 输入 ]
|
| (一份数据)
|
┌────┴────┐
│ 扇出节点 │ (比如一个交换机,或者一个服务)
└────┬────┘
|
┌──────┼──────┐
| | |
| (复制) | (复制) | (复制)
↓ ↓ ↓
[输出1] [输出2] [输出3]
(下游A) (下游B) (下游C)
“扇出”这个词,其实就来源于扇子的形状:
-
扇子的握柄(尾部)只有一个点 —— 这是输入(一份消息)。
-
扇子的扇面(头部)是散开的很多条骨架 —— 这是输出(发给多个接收方)。
从“握柄”到“扇面”,骨子里的动作就是从一到多,这就是“扇出”。
扇形交换机
理解了“扇出”,就理解了扇形交换机。
在消息队列(如 RabbitMQ)中,Fanout 交换机(Fanout Exchange)也叫扇形交换机,可以把它理解成一个广播喇叭。它的工作方式很简单:
-
忽略“地址”:它不关心消息上带的“路由键”(RoutingKey),只要消息来了,就无差别对待。
-
全员广播:它会将收到的每条消息,都复制并发送给所有绑定到它上面的队列。绑定了几个队列,就复制几份,每个绑定的队列都会收到一模一样的一份消息。
Fanout 交换机的工作流程:

他有什么作用?
这种“广播”特性,非常适合需要将一份消息通知给多个独立系统的场景:
-
全局通知:比如用户下单成功,需要同时通知“积分系统”增加积分、“物流系统”准备发货、“短信系统”发送提醒,就可以用 Fanout 交换机广播这条订单消息。
-
日志收集:应用程序的日志可以发送给 Fanout 交换机,然后同时分发给“实时监控面板”、“日志存储服务”和“错误报警系统”。