RabbitMQ的四种交换机

RabbitMQ交换机

什么是RabbitMQ

RabbitMQ 是一个开源的消息代理和队列服务器,用于在分布式系统中存储和转发消息。它基于 AMQP(高级消息队列协议)实现,支持多种消息传递模式,广泛应用于异步通信、应用解耦、负载均衡等场景。

RabbitMQ 的核心概念

  1. Producer(生产者):发送消息的应用程序。

  2. Consumer(消费者):接收消息的应用程序。

  3. Queue(队列):存储消息的缓冲区,消息在队列中等待被消费。

  4. Exchange(交换机):接收生产者发送的消息,并根据规则将消息路由到一个或多个队列。

  5. Binding(绑定):连接交换机和队列的规则,定义了消息如何从交换机路由到队列。

  6. 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类型的ExchangeDirect相比,都是可以根据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: errorseverity: high

    • 队列绑定到交换机时指定 Header 匹配条件为 type = errorseverity = high

    • 只有满足 Header 条件的消息会被路由到该队列。

总结

  • Direct Exchange:精确匹配 Routing Key。

  • Fanout Exchange:广播消息到所有队列。

  • Topic Exchange:根据模式匹配 Routing Key。

  • Headers Exchange:根据消息的 Header 属性进行路由。

每种交换机类型适用于不同的场景,选择合适的交换机类型可以提高消息路由的效率和灵活性。

相关推荐
用户8307196840828 小时前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者1 天前
RabbitMQ的消息模式和高级特性
后端·消息队列·rabbitmq
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
追风筝的人er4 天前
企业管理系统如何实现自定义首页与千人千面?RuoYi Office 给出了完整方案
vue.js·spring boot·spring cloud
别催小唐敲代码4 天前
嵌入式学习路线
学习
毛小茛4 天前
计算机系统概论——校验码
学习
babe小鑫4 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
让我上个超影吧4 天前
消息队列——RabbitMQ(高级)
java·rabbitmq
winfreedoms4 天前
ROS2知识大白话
笔记·学习·ros2