3、RabbitMQ基础

发布时间:2026/10/4 21:20:40

3、RabbitMQ基础 1. 核心概念1.1 工作模型Connection连接客户端与 RabbitMQ Broker 之间建立的一条TCP 连接。创建 TCP 连接成本很高三次握手、分配服务端资源、端口占用。如果每发送一条消息就新建一个 TCP 连接高并发场景下会造成端口耗尽、MQ 压力巨大、性能严重下降。Channel信道1.如果每一次访问RabbitMQ都建立一个Connection在消息量大的时候建立TCP连接的开销将是巨大的效率也较低在系统访问流量高峰时会严重影响系统性能。2.Channel信道是在Connection内部建立的逻辑连接 如果应用程序支持多线程通常每个线程创建单独的channel进行通讯 channel 之间是完全隔离的。Channel作为轻量级的Connection极大减少了操作系统建立TCPconnection的开销 。在已经存在的一条 TCP Connection 内部开辟出来的多条独立的逻辑通道。一条 TCP 连接可以创建成百上千个 Channel。Channel 之间完全隔离互不影响。Channel 的创建销毁开销极小不需要新建 TCP。RabbitMQ 所有业务操作声明交换机、声明队列、绑定、发消息、消费消息、ACK 确认全部都要在 Channel 上完成。一句话总结ConnectionTCP物理连接ChannelTCP连接里面的会话/虚拟管道Client|TCPConnection1条物理连接|┌──────┴──────┬──────┴──────┐Channel1Channel2Channel3发订单消息 发支付消息 消费日志消息BrokerBroker就是RabbitMQ的消息服务器实例本身是接收、存储、路由、转发消息的独立服务进程。Broker 内部包含哪些组件Broker└── vhost虚拟主机可以多个 ├──Exchange交换机 ├──Queue队列 ├──Binding绑定关系 ├── 用户、权限 └── 消息数据注意Connection、Channel不属于 Broker。Virtual host虚拟主机1.Virtual host是一个虚拟主机的概念一个Broker中可以有多个虚拟主机。2.Virtual‑Host虚拟主机/虚拟域是Broker内部一套独立的逻辑隔离环境。 类比理解-Broker≈ 一台MySQL数据库服务器-vhost ≈MySQL里面的 database数据库库3.一个Broker可以创建多个 vhost不同 vhost 的交换机、队列、绑定关系完全隔离、互不可见、互不干扰。RabbitMQ安装完成后自带一个默认虚拟主机/Virtual host 里面包含哪些资源在某一个 vhost 下拥有一套独立完整资源Exchange交换机Queue队列Binding交换机‑队列绑定关系权限配置哪些用户可以访问这个 vhost❗重点**交换机、队列是属于某个 vhost 的不是属于整个Broker**。 在 vhost‑A创建的队列 order_queue在 vhost‑B看不到也不能访问。Virtual host 核心作用1. 资源隔离最主要用途同一套 RabbitMQ 集群给多个项目 / 多个环境共用时使用 vhost 隔离。示例场景一台 RabbitMQ 服务同时给三个项目使用vhost‑dev开发环境vhost‑test测试环境vhost‑prod生产环境开发环境的队列不会跑到测试环境即使队列名字完全一样也互不冲突。2. 权限管控可以给不同用户分配不同 vhost 的访问权限。示例用户 dev_user 只能登录vhost‑dev不能访问生产 vhost管理员账号可以访问全部 vhost权限粒度对某个 vhost配置用户的configure、write、read权限。configure声明 / 删除交换机、队列的权限write发送消息权限read消费消息、ACK 的权限3. 多租户一套 RabbitMQ 集群供给多个业务团队使用每个团队分配独立 vhost实现多租户隔离。4. Exchange交换机Exchange是BrokerMQ服务端内部负责接收生产者消息、然后按照路由规则把消息分发到队列的路由组件。 交换机资源属于某一个 vhost虚拟主机不同 vhost 下同名交换机互不干扰。一条黄金规则 生产者永远不会直接把消息发送到队列。生产者只能发送消息到交换机。 再由交换机把消息路由到一个或者多个Queue。交换机本身默认不存储消息交换机只做转发路由消息最终存储在队列只有开启延迟消息插件时延迟交换机才会临时持有消息。消息投递完整链路生产者 →Exchange(交换机)→Binding(绑定)→Queue(队列)→ 消费者交换机四大基础属性Name 交换机名称Type 交换机类型Direct / Fanout / Topic / Headers决定路由匹配规则Durable 是否持久化true交换机元数据持久化MQ 重启后交换机还存在false临时交换机Broker 重启就消失Auto‑delete 是否自动删除true当最后一个和它绑定的队列解绑之后交换机自动被删除Arguments额外可选参数延迟交换机等插件参数绑定 (Binding) 概念交换机 ↔ 队列的桥梁交换机本身不知道队列的存在必须通过绑定建立关系Exchange--(BindingKey绑定键)--Queue不同交换机类型对routing-key(路由键)和binding-key(绑定键)的匹配规则完全不一样。Routing‑key生产者发消息时携带的路由键Binding‑key队列绑定交换机时设置的绑定键
延伸阅读

更多相关文章

2026/10/2 13:33:07

让 Hermes 接管文档同步:代码变了,文档也跟着变

很多企业不是不会写文档。真正的问题是:文档没有进入软件交付流程。开发改了接口,API 文档还停在旧版本。 数据库字段变了,数据字典没人同步。 部署方式调整了,运维手册仍然是几个月前那一套。时间一长,团队真正敢相信…

2026/9/29 22:22:31

SSM框架与Java实现数字图像处理教学网站开发

1. 项目概述:SSMJava数字图像处理课程网站的设计与实现 这个基于SSM框架和Java语言的数字图像处理课程网站,是专门为2026届计算机相关专业毕业生设计的毕业设计项目。作为一个完整的教学辅助系统,它不仅包含了常规的课程管理功能,…

2026/10/1 17:34:04

OpenHarmony与React Native融合实现渐变进度条

1. OpenHarmony与React Native的融合背景 在移动应用开发领域,跨平台框架与操作系统深度整合的需求日益增长。OpenHarmony作为开源分布式操作系统,与React Native(简称RN)这种流行的跨平台开发框架结合,为开发者提供了全新的可能性。这种组合…

2026/10/4 21:17:00

AI工程从零到部署:完整实践指南与踩坑记录

老实说,《ai-engineering-from-scratch》这个标题看起来像是一个短期突击计划,但真正把它做完之后,我觉得它更像一面镜子——照出一个新手在AI工程这条路上一路踩坑、填坑、重新爬起来的全过程。过去大半年我基本就是这个状态:零基…

2026/10/4 21:17:00

从RAG到RIG:OpenRig解决多跳知识问答的工程实践

1. 从RAG到RIG:为什么"先生成再检索"救不了多跳问题上个月我们在内部知识库上线的RAG问答系统,被业务方连续问倒了三次。三次都栽在同一类问题上:"A方案和B方案冲突时,合同模板里哪一条优先?"&quo…

2026/10/4 21:17:00

openrig实践:配置驱动多智能体编排框架的安装、部署与工程落地

openrig 是我最近在折腾的一个开源项目——准确说,是一个配置驱动的多智能体编排框架。它在圈子里不算火,但用下来很顺手,解决了一个我之前反复纠结的问题:agent 的逻辑散落在代码里,每加一个工具、每改一次流程都要动主程序,时间一长整个项目变成一座动不了的积木塔。这篇文章…

2026/10/4 21:12:00

从 failed to load plugins 看插件系统:加载失败根因与排查

我不止一次在启动日志里被一行failed to load plugins或plugins did not activate的告警搞得头皮发麻。尤其是那些把插件机制做得比较“野”的工具,装了一堆插件,最后启动时某个不显眼的报错让你排查一整个下午。这次不聊某个具体产品,而是从…

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑