news 2026/7/11 8:31:19

rabbitmq-深入理解exchange/queue/routing-key等概念

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
rabbitmq-深入理解exchange/queue/routing-key等概念

​ 日拱一卒,功不唐捐。大家好,最近有项目要用到消息队列,所以考虑到了使用rabbitmq。使用rabbitmq之前需要对其相关理论概念有些了解,大家一块熟悉一下。

​ RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在不同的应用之间共享数据(跨平台跨语言)。RabbitMQ是使用Erlang语言编写,并且基于AMQP协议实现。消息队列的主要用途包括应用解耦以及削峰填谷的用。

​ 这里梳理了一下都涉及的相关概念:exchange,queue,producer,consumer,route,vhost,message,channel,user,binding,bindingKey 大家看看如果还缺啥补充。

1. Producer/Consumer-生产者/消费者

这个还是比较好理解的,生产者和消费者,就好比日常生活中的商品的生产和消费一样,消息队列中的生产者生产并推送消息,消费者接受并消费处理消息。

2. Queue-消息队列

传统队列就是一种存储数据的结构,这里的queue就是Rabbitmq中的一种资源对象,用于存储消息,每个消息最终都得落到队列里面。

3. Exchange-交换机

生产者将消息发送到 Exchange,由 Exchange 将消息路由到一个或多个 Queue 中(或者丢弃)。Exchange 根据消息的属性或内容路由消息。

3.1 exchange types
exchange 类型特点备注
direct点对点/一对一,精确匹配特定queue考虑routing key,消息直接路由至特定queue
topic一对一或一对多,模糊匹配,灵活度高,性能差考虑routing key,支持 “#”和“*”通配符的路由键,匹配多个队列
fanout广播/发布订阅,匹配多个queue不考虑routing key,广播消息至 bind该exchange的所有queue
rpc类似hook模式发送消息,监听回调队列,实现rpc
4. Routing Key-路由键

生产者在将消息发送到 Exchange 的时候,一般会指定一个 routing key,来指定这个消息的路由规则,而这个 routing key 需要与 Exchange Type 及 binding key 联合使用才能最终生效。

在 Exchange Type 与 binding key 固定的情况下(在正常使用时一般这些内容都是固定配置好的),我们的生产者就可以在发送消息给 Exchange 时,通过指定 routing key 来决定消息流向哪里。

5. Vhost

虚拟主机(Virtual Host,Vhost),用作逻辑隔离,可以理解为独立的命名空间,分别管理各自的 Exchange、Queue 和 Binding,使得应用安全的运行在不同的 Vhost 实例上,相互之间不会干扰。一个实例下可以有多个 Vhost,一个 Vhost 里面可以有若干个 Exchange 和 Queue。生产者和消费者连接消息队列 RabbitMQ 版需要指定一个 Vhost。

6. User

RabbitMQ 版集群内部做权限划分的最小单位,您可以通过为用户配置权限为其赋予不同 Vhost 下的配置和读写权限。

每个用户都可以设置用户密码:用户可以通过在客户端中添加用户名和密码来访问RabbitMQ 版集群进行消息的生产消费。

每个用户都可以赋予权限:权限指的是用户对该 Vhost 下 Exchange,Queue的操作权限,包括配置权限,读写权限。配置权限会影响 Exchange,Queue的声明和删除。读写权限影响从 Queue 里读取消息,向 Exchange 发送消息以及 Queue 和 Exchange 的绑定(binding)操作。

7. Binding

RabbitMQ 中通过 Binding 将 Exchange 与 Queue 关联起来,这样 RabbitMQ 就知道如何正确地将消息路由到指定的 Queue了。

7.1 BindingKey

在绑定(Binding)Exchange 与 Queue 的同时,一般会指定一个 binding key;生产者将消息发送给 Exchange 时,一般会指定一个 routing key;当 binding key 与 routing key 相匹配时,消息将会被路由到对应的 Queue 中。

在绑定多个 Queue 到同一个 Exchange 的时候,这些 Binding 允许使用相同的 binding key。

binding key 并不是在所有情况下都生效,它依赖于 Exchange Type,例如 fanout 类型的 Exchange 就会无视 binding key,而是将消息路由到所有绑定到该 Exchange 的 Queue。

8. Channel

信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内地虚拟链接,AMQP命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说,建立和销毁TCP都是非常昂贵的开销,所以引入了信道的概念,以复用一条TCP连接。

参考:

https://www.rabbitmq.com/tutorials/tutorial-one-python

https://www.cnblogs.com/xiaozhang666/p/13866121.html

https://cloud.tencent.com/document/product/1495/61825

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 10:12:06

本地文件远程秒调!ZFile+cpolar 让文件管理不再受限于局域网

文章目录前言【视频教程】1.关于ZFile2.本地部署ZFile3.使用ZFile4.ZFile的配置5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定ZFile公网地址前言 ZFile 是一款专注于文件管理的工具,支持本地存储、云存储等多种存储源,能在网页端实现文件上传、…

作者头像 李华
网站建设 2026/7/10 0:37:28

绒种区分:白鹅绒 vs 灰鹅绒,哪种更好?关键差异详解

绒种区分:白鹅绒 vs 灰鹅绒,哪种更好?关键差异详解 白鹅绒与灰鹅绒究竟有何区别?许多消费者误以为颜色代表品质差异,其实两者核心区别仅在于鹅毛颜色,保暖性、蓬松度等关键性能并无区别。无论是白鹅绒还是灰…

作者头像 李华
网站建设 2026/7/10 18:40:30

别再卷Python了!普通人AI学习路线图,收藏这篇少走一年弯路

文章针对AI学习焦虑的普通人,提出应用型学习路径,破除三大误区:不必先学Python/算法、AI已融入日常生活、应从场景出发学习。强调普通人应成为AI使用者而非开发者,重点是任务拆解、需求描述和结果判断。提供四类场景学习路径&…

作者头像 李华
网站建设 2026/7/10 13:23:54

2025年主流远程控制软件横向测评:技术特性、场景匹配与选型参考

转眼到了2025年底,远程协作与技术支持已成为常态。回顾近几年,远程控制软件的市场格局与用户体验发生了显著变化。早期,TeamViewer、AnyDesk 等国外产品是许多技术人员的第一选择。而近年来,一批国产软件在可用性、本地化优化方面…

作者头像 李华
网站建设 2026/7/10 19:02:17

4种方法彻底删除realme SIM卡中的联系人

您的个人联系信息是realme手机上最敏感的数据之一。许多realme用户在将设备转让给他人之前,或者为了确保在SIM卡丢失、被盗或借出时敏感号码无法被访问,都会寻求彻底删除realme SIM卡中的联系人的方法。本文将介绍4种有效的方法,可以永久删除…

作者头像 李华