RabbitMQ的四种交换机
目录
RabbitMQ的四种交换机
RabbitMQ交换机
什么是RabbitMQ
RabbitMQ 是一个开源的消息代理和队列服务器,用于在分布式系统中存储和转发消息。它基于
AMQP(高级消息队列协议)实现,支持多种消息传递模式,广泛应用于异步通信、应用解耦、负载均衡等场景。
RabbitMQ 的核心概念
- Producer(生产者) :发送消息的应用程序。
- Consumer(消费者) :接收消息的应用程序。
- Queue(队列) :存储消息的缓冲区,消息在队列中等待被消费。
- Exchange(交换机) :接收生产者发送的消息,并根据规则将消息路由到一个或多个队列。
- Binding(绑定) :连接交换机和队列的规则,定义了消息如何从交换机路由到队列。
virtual host
:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue 生产者Producer 生产消息,然后将消息发给交换机Exchange ,根据不同规则的交换机Exchange 按照各自处理消息的方法转发到对应的队列中Queue
四种交换机类型
RabbitMQ 提供了四种主要的交换机类型,每种类型根据不同的路由规则将消息分发到队列。
1 Direct Exchange(直连交换机)
在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange
- 路由规则 :消息的 Routing Key 必须与 Binding Key 完全匹配。
- 使用场景 :适用于消息需要精确路由到特定队列的场景。
- 示例 :
- 生产者发送消息时指定 Routing Key 为
blue
。 - direct.queue1队列绑定到交换机时指定 Binding Key 为
blue
。 - 只有 Routing Key 为
blue
的消息会被路由到该队列direct.queue1。
2 Fanout Exchange(扇出交换机)广播模式
- 路由规则 :忽略 Routing Key,将消息广播到所有绑定的队列。
- 使用场景 :适用于消息需要广播到多个队列的场景,如日志记录、事件通知等。
- 示例 :
- 生产者发送消息到 Fanout Exchange。
- 所有绑定到该交换机的队列 都会收到消息,无论 Routing Key 是什么。
3 Topic Exchange(主题交换机)
- 路由规则 :根据 Routing Key 和 Binding Key 的模式匹配进行路由。Binding Key 可以使用通配符
*
(匹配一个单词)和#
(匹配零个或多个单词)。 - 使用场景 :适用于消息需要根据特定模式路由到多个队列的场景。
Topic
类型的Exchange
与Direct
相比,都是可以根据RoutingKey
把消息路由到不同的队列。 只不过Topic
类型Exchange
可以让队列在绑定BindingKey
的时候使用通配符!BindingKey
一般都是有一个或多个单词组成,多个单词之间以.
分割,例如:item.insert
通配符规则: #
:匹配一个或多个词*
:匹配不多不少恰好1个词 举例:item.#
:能够匹配item.spu.insert
或者item.spu
item.*
:只能匹配item.spu
假如routing key为china.people.weather,因为topic.queue1 的bindingkey为china.#,会匹配到交换机,消息会发送到topic.queue1队列中,而topic.queue2 无法匹配routingkey,所以消息不会被转发到topic.queue2队列中 **4.**Headers Exchange(头交换机) Headers交换机很少使用,就不解释了 因为我也不会……^_^
- 路由规则 :根据消息的 Header 属性进行路由,而不是 Routing Key。Binding 时可以指定多个 Header 的匹配条件。
- 使用场景 :适用于消息需要根据复杂的 Header 属性进行路由的场景。
- 示例 :
- 生产者发送消息时指定 Header 为
type: error
和severity: high
。 - 队列绑定到交换机时指定 Header 匹配条件为
type = error
且severity = high
。 - 只有满足 Header 条件的消息会被路由到该队列。
总结
- Direct Exchange :精确匹配 Routing Key。
- Fanout Exchange :广播消息到所有队列。
- Topic Exchange :根据模式匹配 Routing Key。
- Headers Exchange :根据消息的 Header 属性进行路由。 每种交换机类型适用于不同的场景,选择合适的交换机类型可以提高消息路由的效率和灵活性。