RabbitMQ系列学习笔记(七)--RabbitMQ交换机

文章目录

本文参考:
尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq
RabbitMQ 详解
Centos7环境安装Erlang、RabbitMQ详细过程(配图)

一、Exchange概念

RabbitMQ 消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列 。实际上,通常生产者甚至都不知道这些消息传递传递到了哪些队列中。

相反,生产者只能将消息发送到交换机 (exchange) ,交换机工作的内容非常简单,一方面它接收来自生产者的消息,另一方面将它们推入队列。交换机必须确切知道如何处理收到的消息,是应该把这些消息放到特定队列还是说把他们放到许多队列中还是说应该丢弃它们。这就得由交换机的类型来决定。

二、交换机类型

RabbitMQ 的交换机大致可分为以下四类:

  • Fanout:广播(扇出):将消息交给所有绑定到交换机的队列。
  • Direct:直接(路由):把消息交给符合指定routing key 的队列。
  • Topic:通配符(主题):把消息交给符合routing pattern(路由模式) 的队列。
  • headers:标题:headers信息类型交换机,通过消息内容中的headers属性匹配队列。

在本系列笔记中已经介绍了两种RabbitMQ的工作方式,分别是简单模式(hello world)和工作队列模式(work queue),这两种工作方式都是基于Direct直接交换机,也是RabbitMQ默认的交换机。后面会将剩余集中模式逐一展开介绍,而最后一种headers交换机性能较差,在实际中并不常用。

三、无名交换机

在之前的例子中,使用channel.basicPublish("",QUEUE_NAME,null,message.getBytes());进行消息发送,这里第一个参数就是指定交换机的类型,虽然使用了空字符串"",仍然能实现将消息发送到指定队列,实际上,这里使用的是RabbitMQ的默认直接交换机(Direct Exchange),消息能路由发送到队列中其实是由routingKey(bindingkey)绑定key指定的,这里由于第二个参数指定了队列的名称,因此默认的直接交换机Direct根据routingKey将消息发送到指定的队列。

四、绑定(bindings)

那么什么是binding呢,binding其实是exchange和queue之间的桥梁,它告诉我们exchange和那个队列进行了绑定关系。比如说下面这张图告诉我们的就是X与Q1和Q2进行了绑定。

binding的对应关系如下:

  • 一个交换机可以和多个队列绑定。
  • 一个交换机可和一个队列建立多个绑定关系(routingKey不同)。

研究完RabbitMQ的交换机基本原理,后面将继续介绍剩余的RabbitMQ工作模式,他们是分别基于不同类型的交换机来实现的,并且对应不同的用法。

相关推荐
中屹指纹浏览器20 小时前
2026WebGL2着色器浮点精度与帧缓存像素指纹溯源及内核渲染层差异化改造详解
经验分享·笔记
txh050720 小时前
串口数据调试-直观表示
嵌入式硬件·学习
YunQuality20 小时前
老牌连接器大厂盛凌电子启动QMS数字化升级:制造企业的质量内卷,终于不靠“人盯人”了
笔记·制造·职场·工业软件
Lucky_ldy20 小时前
51单片机的学习下(结合中科协的个人自用笔记)
笔记·学习·51单片机
OBiO201320 小时前
AAV在肠道研究中的应用:从血清型选择到炎症性肠病研究案例解析
学习
段一凡-华北理工大学20 小时前
工业领域的Hadoop架构学习~系列文章16:实时流处理架构 - 工业数据的实时动脉
大数据·数据仓库·hadoop·分布式·学习·架构·高炉炼铁
MartinYeung520 小时前
[论文学习]隐私保护联邦学习于入侵侦测系统之调查研究
学习
钟灵92120 小时前
C++【模板初阶】
开发语言·c++·笔记·c#
稷下元歌20 小时前
aifei学习前置基础:全套完整教程:Anaconda 安装→环境配置→YOLOv8+OpenCV 安装 + OpenCV 实操 + 标注→训练→导出→部署
opencv·学习·yolo
江屿风20 小时前
【C++笔记】vector流食般投喂
开发语言·c++·笔记