
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队列绑定交换机时设置的绑定键