文章目录
- RabbitMQ 工作流程
- 流程图
- Producer 和 Consumer
- Connecting 和 Channel
- Virtual host
- Queue
- Exchange
- RabbitMQ 工作流程
RabbitMQ 工作流程
流程图

RabbitMQ 就是一个生产者/消费者模型
Producer就是生产者、Consumer就是消费者Broker是RabbitMQ服务器- 生产者和消费者都是
RabbitMQ服务器的客户端
生产者客户端需要通过 Connection(连接)来和 RabbitMQ 服务器进行通信;RabbitMQ 服务器要通过 Connection(连接)来和消费者客户端进行通信
- 一个
Connection有多个channelchannel就是消息传递的方式
Brocker(RabbitMQ 服务器)
- 一个
Brocker可以有多个虚拟主机(虚拟机) - 多个虚拟机之间是逻辑上的隔离,并不是物理上的隔离
- 每个虚拟机中,会有多个
Exchange(交换机)和Queue(队列)- 消息是先发送到交换机,然后由交换机进行消息的分发,然后到达队列
- 在
RabbitMQ服务器收到消息的时候,会带上一些标签(消息要发到哪里等等) - 随后交换机拿到这个消息之后,会根据标签或者一些设置的信息,把这个消息路由到一个或者两个队列
- 如果没有匹配队列,交换机就会将此消息丢掉,或者返回给生产者
- 在
- 消息是先发送到交换机,然后由交换机进行消息的分发,然后到达队列
生产者和消费者使用的不是同一个 Connection

- 这个图上的
Connection显示的是客户端的连接- 包含生产者和消费者的连接
Producer 和 Consumer
Producer:生产者,是RabbitMQ Server的客户端,向RabbitMQ发送消息Consumer:消费者,也是RabbitMQ Server的客户端,从RabbitMQ接收消息Brocker:就是RabbitMQ Server,主要是接收和收发消息

-
生产者根据一定的逻辑创建消息,然后把消息发送到
Brocker里面,发送的这个消息通常是带有一定的业务逻辑结构的- 比如生产者是一个订单服务,那发送的就是订单相关信息
- 订单
id - 订单金额
- 订单数量
- 支付时间
- …
- 订单
- 比如生产者是一个用户注册信息,那发送的就是用户相关信息
- 用户
id - 用户年龄
- 用户性别
- …
- 用户
- 比如生产者是一个订单服务,那发送的就是订单相关信息
-
在生产者发送消息的时候,通常还会带上一些标签,
Brocker在收到消息的时候,交换机会根据这些标签进行路由,最终把它放到队列里面
-
消费的时候,标签就会被丢掉。消费者只会收到消息,并不知道其他信息
- 消费者并不需要知道其他信息,只需要在收到消息之后,进行相应的逻辑处理即可
Connecting 和 Channel

Connection:连接。是客户端和RabbitMQ服务器之间的一个TCP连接,这个连接是建立消息传递的基础,它负责传输客户端和服务器之间的所有数据和控制信息Channel:通道,信道。Channel是在Connection之上的一个抽象层。在RabbitMQ中,一个TCP连接可以有多个Channel,每个Channel都是独立的虚拟连接,消息的发送和接收都是基于Channel的
通道的主要作用是将消息的读写操作复用到一个 TCP 连接上,这样可以减少建立和关闭连接的开销,提高性能
Virtual host
Virtual host:虚拟主机。这是一个虚拟概念,它为消息队列提供了一种逻辑上的隔离机制,对于RabbitMQ而言,一个BrokerServer上可以存在多个Virtual host。当多个不同的用户使用同一个RabbitMQ Server提供的服务时,可以虚拟划分出多个vhost,每个用户在自己的vhost创建exchange/queue等
类似于
MySQL的database,是一个逻辑上的集合,一个MySQL服务器可以有多个database
Queue
Queue:队列。RabbitMQ的内部对象,用于存储消息
消息经过一系列的转发
- 先通过
Channel到达Exchange - 然后通过
Exchange到达Queue - 最终存储的地方就是
Queue

队列和消费者的关系,是多对多的
- 一个队列,可以由多个消费者来订阅
- 一个消费者也可以订阅多个队列
Exchange
Exchange:交换机。message到达Brocker的第一站,它负责接收生产者发送的消息,并根据特定的规则把这些消息路由到一个或多个Queue中

- 消息可能会发给多个队列
- 可能发给一个队列
- 也可能没有队列
RabbitMQ 工作流程

Producer生产了一条消息Producer连接到RabbitMQ Brocker,建立一个连接(Connection),开启一个信道(Channel)Producer声明一个交换机(Exchange),路由消息Producer声明一个队列(Queue),存放信息Producer发送消息至RabbitMQ BrockerRabbitMQ Brocker接收消息,并存入相应的队列(Queue)里面,如果未找到相应的队列,则根据生产者的配置,选择丢弃或者退回给生产者
如果我们把
RabbitMQ比作一个物流公司,那么它的一些核心概念可以这样理解:
Brocker就类似整个物流公司的总部,它负责协调和管理所有的物流站点,确保包裹安全、高效地送达Virtual Host可以看做是物流公司为不同客户或业务部门划分的独立运营中心。每个运营中心都有自己的仓库(Queue),分拣规则(Exchange)和运输路线(Connection和Channel),这样可以确保不同客户的包裹处理不会相互干扰,同时提供定制化的服务Exchange就像是站点里的分拣中心。当包裹到达时,分拣中心会根据包裹上的标签来决定这个包裹应该送往那个目的地(队列)。快递站点可能有不同类型的分拣中心,有的按照具体地址分拣,有的将包裹复制给多个收件人等Queue就是快递站点里的一个个仓库,用来临时存放等待派送的包裹。每个仓库都有一个或多个快递员(消费者)负责从仓库中取出包裹并派送给最终的收件人Connection就像是快递员与快递站点之间的通信线路,快递员需要通过这个线路来接收派送任务(消息)Channel就像是快递员在执行任务时使用的多个并行的通信线路。这样,快递员可以同时处理多个包裹,比如一遍派送包裹,一边接收新的包裹
