RabbitMq中交换机(Exchange)、队列(Queue)和路由键(Routing Key)
RabbitMQ 是一个消息代理系统,使用交换机(Exchange)、队列(Queue)和路由键(Routing Key)来管理消息的传递。它们分别起到不同的作用,构成了消息从生产者到消费者的传递路径。
以下是详细的解释:
1. 交换机(Exchange)
作用:
交换机负责接收来自生产者的消息,并根据一定的路由规则将消息分发给一个或多个队列。它是生产者和队列之间的中间层,生产者永远不会直接将消息发送到队列,而是通过交换机。
种类:
RabbitMQ 中有几种类型的交换机,每种交换机的消息路由行为都不同:
- Direct(直连交换机):根据精确匹配路由键(Routing Key)来将消息转发到绑定了相同路由键的队列。
- Fanout(扇出交换机):不处理路由键,直接将消息广播给绑定到该交换机的所有队列。类似广播机制。
- Topic(主题交换机):根据路由键的模式匹配(可以使用通配符)将消息路由到符合条件的队列。
- Headers(头交换机):根据消息的 headers(头部信息)属性来路由,而不是使用路由键。
作用场景:
交换机的主要作用是 决定消息应该被发送到哪些队列,每种交换机的类型决定了消息的路由逻辑。
2. 队列(Queue)
作用:
队列是消息的实际存储位置。消息被发送到队列后,消费者从队列中取出并处理。队列中的消息按照 先进先出(FIFO) 的顺序被消费者处理。
- 队列是点对点通信的终点,消费者从队列中拉取消息并处理,每个消息只会被一个消费者处理(除非有特别的广播机制)。
- 消息可以在队列中持久化(持久化队列),即使 RabbitMQ 服务器重启,消息仍然会保存在队列中。
作用场景:
队列的作用是 存储和传递消息。消息在队列中被保存,直到消费者来获取和处理消息。队列可以支持多种消费者,并且保证消息被处理一次且仅一次。
3. 路由键(Routing Key)
作用:
路由键是生产者在将消息发送给交换机时提供的一个字符串,用来指定消息的路由路径。交换机会根据路由键的内容,决定该消息应该发送到哪些队列。
- 在 Direct 交换机 中,路由键用于精确匹配。例如,路由键
task_queue
只会将消息发送到绑定了task_queue
路由键的队列。 - 在 Topic 交换机 中,路由键可以使用通配符进行模糊匹配。例如,
device.*
可以匹配device.data
和device.status
,但device.#
可以匹配多个词。
作用场景:
路由键的作用是 指定消息传递路径。交换机会根据路由键将消息发送到符合条件的队列。
三者的区别和作用总结:
名称 | 作用和功能 | 角色 | 区别 |
---|---|---|---|
交换机(Exchange) | 接收生产者的消息并根据路由键将消息发送到一个或多个队列。交换机本身不保存消息,只负责转发消息。 | 中间人 | 决定消息如何分发到不同的队列 |
队列(Queue) | 用于存储消息,等待消费者来处理。消费者从队列中拉取消息进行处理。队列是消息的最终接收点,消息只能在队列中被消费一次。 | 消费者终点 | 存储和传递消息 |
路由键(Routing Key) | 生产者指定的一个字符串,用来决定交换机如何将消息路由到队列。路由键可以是精确匹配或模糊匹配(使用通配符)。 | 消息路由控制 | 决定消息走向哪些队列 |
三者之间的关系:
- 生产者(Producer):向 交换机 发送消息,并指定一个 路由键。
- 交换机(Exchange):根据绑定的规则和 路由键,将消息转发到合适的 队列。
- 队列(Queue):消息最终到达 队列,并等待消费者取出并处理。
- 消费者(Consumer):从队列中取出消息进行处理。
流程示例:
假设我们有以下 RabbitMQ 配置:
- 交换机:
task_exchange
(类型为 Direct)。 - 队列:
task_queue
。 - 路由键:
task.new
.
消息传递过程:
- 生产者发送一条消息到
task_exchange
,并指定路由键为task.new
。 task_exchange
交换机会检查是否有队列绑定了task.new
路由键。- 如果
task_queue
队列绑定了task.new
路由键,交换机会将消息发送到task_queue
。 - 消费者从
task_queue
中拉取消息并进行处理。
这个流程说明了交换机、队列和路由键之间如何协同工作来完成消息的路由和处理。
常见应用场景:
-
Direct 交换机:
- 用于精确匹配路由键的场景,比如不同的任务类型对应不同的队列,确保消息到达正确的队列。
-
Fanout 交换机:
- 广播消息给多个消费者,常用于发布/订阅模式,比如推送系统消息给所有消费者。
-
Topic 交换机:
- 适用于需要根据复杂模式路由消息的场景,比如日志系统,路由键可以根据日志级别(如
error
、info
)路由到不同的队列。
- 适用于需要根据复杂模式路由消息的场景,比如日志系统,路由键可以根据日志级别(如
相关文章:
RabbitMq中交换机(Exchange)、队列(Queue)和路由键(Routing Key)
RabbitMQ 是一个消息代理系统,使用交换机(Exchange)、队列(Queue)和路由键(Routing Key)来管理消息的传递。它们分别起到不同的作用,构成了消息从生产者到消费者的传递路径。 以下是…...

解码 OpenAI 的 o1 系列大型语言模型
OpenAI 表示,其 Strawberry 项目已升级为新的大型语言模型 (LLM) 系列,公司将其命名为 OpenAI o1。 该公司表示,新系列模型还包括一个 o1-mini 版本,以提高成本效益,可根据其推理能力与最新的GPT-4o 模型进行区分。 …...

大小端字节序 和 内存高低地址顺序
目录 1. 大小端字节序 1.1 什么是大小端字节序? 1.2 为什么有大小端字节序? 1.3 习题:用程序结果判断大端小端 2. 各种易混淆的高低地址顺序 2.1 监视窗口的地址表示【计算机标准展示方式】 2.2 横向地址表示 2.3 一个字节 与 多个字节 的地址…...

Spring扩展点系列-MergedBeanDefinitionPostProcessor
文章目录 简介源码分析示例示例一:Spring中Autowire注解的依赖注入 简介 spring容器中Bean的生命周期内所有可扩展的点的调用顺序 扩展接口 实现接口ApplicationContextlnitializer initialize AbstractApplicationContext refreshe BeanDefinitionRegistryPos…...
Centos 7.9 使用 crontab 实现开机启动
[rootlocalhost ~]# crontab -e [rootlocalhost ~]# reboot # crontab -e reboot /path/to/my/program # reboot 表示重启开机的时候运行一次 reboot /test/hello.sh 参考: Linux crontab 命令 https://www.runoob.com/linux/linux-comm-crontab.html Run prog…...

基于微信的设备故障报修管理系统设计与实现+ssm论文源码调试讲解
2相关技术 2.1微信小程序 小程序是一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。尤其拥抱微信生态圈,让微信小程序更加的如虎添翼,发展迅猛。 2.2 MYSQL数据…...

yolo自动化项目实例解析(二)ui页面整理 1.78
我们在上一章整理main.py 的if __name__ __main__: 内容还留下面这一段, from PyQt5.QtWidgets import *from lanrenauto.moni.moni import *from PyQt5.QtGui import *app QApplication(sys.argv) # 初始化Qt应用ratio screen_width / 2560 # 分辨率比例# 设…...

PyQt / PySide + Pywin32 + ctypes 自定义标题栏窗口 + 完全还原 Windows 原生窗口边框特效项目
项目地址: GitHub - github201014/PyQt-NativeWindow: A class of window include nativeEvent, use PySide or PyQt and Pywin32 and ctypesA class of window include nativeEvent, use PySide or PyQt and Pywin32 and ctypes - github201014/PyQt-NativeWindow…...
面试时遇见的项目问题
汽车在线销售平台项目 项目的甲方是谁? 甲方是一家汽车销售公司,他们希望通过互联网技术提升销售效率和服务质量 为什么要做这个项目? 很多消费者越来越倾向于在线上完成购车之前的大部分决策。所以甲方找到我们希望通过建立一个在线的销…...

在线骑行网站设计与实现
摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装在线骑行网站软件来发挥其高效地信息处理的作用,…...
大批量查询方案简记(Mybatis流式查询)
Mybatis的流式查询 摘要: 介绍使用mybatis流式查询解决大数据量查询问题. 1 业务背景 开发中遇到一个业务,说起来也很无奈:公司用的数据库MySQL,一张表里只保留了一个月的数据,但是数据量竟然高达2000W还要多,然后用户有个需求也很恶心,为了完成这个业务我需要定时任务每一个月…...

python - 子类为什么调用父类的方法
菜鸟教程 - 面向对象https://www.runoob.com/python3/python3-class.html为什么写这个呢 ,因为很多时候,事情很简单,但我往往记住了使用方式,忘记了使用原因,也因为自己看到super()时,也想问为什么要用supe…...

【JavaScript】数据结构之字典 哈希表
字典 键值对存储的,类似于js的对象,但在js对象中键[key]都是字符串类型或者会转换成字符串类型,因此后声明的键值会覆盖之前声明的值。字典以map表示,map的键不会转换类型。 let map new Map() map.set(a, 1) map.set(b, 2) ma…...

Adobe出现This unlicensed Photoshop app has been disabled
Adobe Acrobat或Photoshop软件突然出现This unlicensed Photoshop app has been disabled 症状 解决方法 删除软件安装目录下的AcroCEF和acrocef_1l两个子文件夹。主要是为了删除AcroCEF.exe。 如果存在复发,则删除xxxxxxx\AdobeGCClient\AdobeGCClient.exe。 不…...
elementui 单元格添加样式的两种方法
方法一 <el-table-column fixed prop"name" label"姓名" width"120"> <<template scope"scope"> <span :class"{red:scope.row.color1,yell:scope.row.color2,green:scope.row.col…...
如何有效管理技术债务:IT项目中的长期隐患
如何有效管理技术债务:IT项目中的长期隐患 在软件开发和IT项目管理中,技术债务(Technical Debt)是一个经常被忽视却又至关重要的概念。技术债务就像金融债务一样,当我们在项目开发中选择了某些“捷径”来快速交付&…...

2024 “华为杯” 中国研究生数学建模竞赛(D题)深度剖析|大数据驱动的地理综合问题|数学建模完整代码+建模过程全解全析
当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题! CS团队倾注了大量时间和心血,深入挖掘解…...
Linux 清空redis缓存及查询key值
1.登录redis redis-cli -h 127.0.0.1 -p 6379# 如果有密码需要下面这一步 auth 你的密码直接带密码登录 redis-cli -h 127.0.0.1 -p 6379 -a 密码出现ok表示登录成功 2.标题查看所有key keys *3.查看某个key 的值 get keyName4.清空整个Redis服务器的数据 flushall5.查看…...

MySql调优(三)Query SQL优化(2)explain优化
explain执行计划出现以下情况,均需要优化: 一、Using temporary 查询执行过程中出现Using temporary提示,通常意味着MySQL需要创建一个临时表来存储中间结果。这种情况多发生在数据库优化器无法通过现有的索引直接有效地执行查询时…...

Java【代码 18】处理Word文档里的Excel表格数据(源码分享)
处理Word文档里的Excel表格数据 1.原始数据2.处理程序2.1 识别替换表格表头2.2 处理多余的换行符2.3 处理后的结果 3.总结 1.原始数据 Word 文档里的 Excel 表格数据,以下仅为示例数据: 读取后的字符串数据为: "姓名\r\n身份证号\r\n手…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡
何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践,很多人以为AI已经强大到不需要程序员了,其实不是,AI更加需要程序员,普通人…...
深入浅出WebGL:在浏览器中解锁3D世界的魔法钥匙
WebGL:在浏览器中解锁3D世界的魔法钥匙 引言:网页的边界正在消失 在数字化浪潮的推动下,网页早已不再是静态信息的展示窗口。如今,我们可以在浏览器中体验逼真的3D游戏、交互式数据可视化、虚拟实验室,甚至沉浸式的V…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...
LTR-381RGB-01RGB+环境光检测应用场景及客户类型主要有哪些?
RGB环境光检测 功能,在应用场景及客户类型: 1. 可应用的儿童玩具类型 (1) 智能互动玩具 功能:通过检测环境光或物体颜色触发互动(如颜色识别积木、光感音乐盒)。 客户参考: LEGO(乐高&#x…...