news 2026/5/1 11:17:00

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/5/1 8:36:05

探索安川七伺服电机方案:从原理到代码实现

安川七伺服电机方案,含原理图,源 代码,解析文档。最近一直在研究安川七伺服电机方案,今天就来和大家分享一下这个有趣且实用的项目,包含原理图、源代码以及详细的解析文档,希望能给对这方面感兴趣的小伙伴一…

作者头像 李华
网站建设 2026/5/1 11:15:33

软件安全之CRC检测

CRC介绍 在玩某些游戏,例如fps类游戏时,你想要修改某些特定的数值实现一些功能,这时你很有可能会被查封账号甚至禁封机器码。因为你更改了游戏中的数据,从而导致接收方收到”错误的数据“。为尽量提高接收方收到数据的正确率&…

作者头像 李华
网站建设 2026/4/18 12:49:38

规则引擎如何选型

一文讲清业内主流规则引擎:对比、选型与踩坑经验在风控、营销、审批、定价、权限控制等系统中,规则引擎几乎是绕不开的基础能力。但现实情况是:有的团队一上来就引入 Drools,最后发现复杂度远超收益;有的团队用 Groovy…

作者头像 李华
网站建设 2026/5/1 9:52:40

解锁RK3568:OpenHarmony移植实战全攻略

引言 在当今数字化时代,芯片与操作系统作为硬件和软件的核心,其重要性不言而喻。RK3568 芯片作为一款备受瞩目的处理器,以其强大的性能和丰富的功能,在智能安防、工业控制、物联网等众多领域得到了广泛应用。而 OpenHarmony 作为一款开源、面向全场景的分布式操作系统,具有…

作者头像 李华
网站建设 2026/5/1 9:58:02

Node.js 编程实战:数据库连接池与性能优化

在 Node.js 后端开发中,数据库性能往往决定了整个系统的吞吐能力和稳定性。很多性能问题并不来自业务逻辑本身,而是由于数据库连接管理不当造成的。合理使用数据库连接池,并结合针对性的优化策略,是构建高性能 Node.js 应用的关键…

作者头像 李华
网站建设 2026/5/1 11:14:24

【回顾React的一些小细节】render里不可包含的东西

在 React 的 render()(或函数组件的渲染路径)中 不应包含副作用(Side effects): 如网络请求、订阅、定时器、I/O、路由跳转等。 为什么:render 应是纯函数,副作用会在每次渲染重复执行或引发循环。替代&…

作者头像 李华