RabbitMQ的四种交换机

server/2025/3/6 18:20:46/

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 属性进行路由。

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


http://www.ppmy.cn/server/172938.html

相关文章

API返回的数据格式是怎样的?

根据搜索结果,以下是1688按图搜索商品(拍立淘)API返回的数据格式的详细说明: API返回的数据格式 1688按图搜索商品(拍立淘)API返回的数据通常是一个JSON格式的响应,其结构如下: {&…

从0搭建Tomcat第二天:深入理解Servlet容器与反射机制

在上一篇博客中,我们从0开始搭建了一个简易的Tomcat服务器,并实现了基本的HTTP请求处理。今天,我们将继续深入探讨Tomcat的核心组件之一——Servlet容器,并介绍如何使用反射机制动态加载和管理Servlet。 1. Servlet容器的作用 S…

第六节:基于Winform框架的串口助手小项目---收发数据《C#编程》

1.目标:实现数据的收发 2.代码演示 根据控件编程 (1)接收配置 自动清空 private void autoclear_chb_CheckedChanged(object sender, EventArgs e) {if (autoclear_chb.Checked){timer1.Start();}else{timer1.Stop();} } 手动清空 privat…

vscode 配置debug的环境

vscode配置debug的环境 配置好python解释器, ctrl shift P 就可以指定python了。 当前环境下建立 .vscode 文件夹新建 .vscode/launch.json 文件文件的配置如下 {"version": "0.2.0","configurations": [{"name": &qu…

Git安装部署

1、下载Git安装包 官网地址:https://git-scm.com/ ,选择你所需要的git安装包 2、安装GIT 除了安装路径外,保持默认,一路next。 3、检查是否安装成功 WinR cmd,打开命令提示符,输入git --version&#xf…

每日学习Java之一万个为什么?[MySQL面试篇]

分析SQL语句执行流程中遇到的问题 前言1 MySQL是怎么在一台服务器上启动的2 MySQL主库和从库是同时启动保持Alive的吗?3 如果不是主从怎么在启动的时候保证数据一致性4 ACID原则在MySQL上的体现5 数据在MySQL是通过什么DTO实现的6 客户端怎么与MySQL Server建立连接…

css画出带圆角平行四边形效果

使用css画出平行四边形效果如下图 HTML代码 <div class"badge"><span>营业中</span> </div> 关键代码&#xff1a; transform: skewX(-15deg); /* 让元素倾斜&#xff0c;形成平行四边形的视觉效果 */ 如果倾斜的元素里面需要放文字&…

stm32主从机硬件IIC实现

前言&#xff1a; IIC作为一个基础的通信协议&#xff0c;活跃于各种设备之间。I2C作为两线通信协议&#xff0c;相较于spi来说所需引脚更少&#xff0c;我们可以使用硬件I2C在设备与设备之间通信&#xff0c;但在硬件I2c被其他功能所占据引脚时&#xff0c;也可以使用软件拉高…