界⾯上的导航栏共分6部分,这6部分分别是什么意思呢?
我们先看看RabbitMQ的⼯作流程:
RabbitMQ是⼀个消息中间件,也是⼀个⽣产者消费者模型.它负责接收,存储并转发消息.
Producer和Consumer
Producer: ⽣产者,是RabbitMQServer的客⼾端,向RabbitMQ发送消息
Consumer:消费者,也是RabbitMQServer的客⼾端,从RabbitMQ接收消息
Broker:其实就是RabbitMQServer,主要是接收和收发消息
- ⽣产者(Producer)创建消息,然后发布到RabbitMQ中.在实际应⽤中,消息通常是⼀个带有⼀定业务逻辑结构的数据,⽐如JSON字符串.消息可以带有⼀定的标签,RabbitMQ会根据标签进⾏路由,把消息发送给感兴趣的消费者(Consumer).
- 消费者连接到RabbitMQ服务器,就可以消费消息了,消费的过程中,标签会被丢掉.消费者只会收到消息,并不知道消息的⽣产者是谁,当然消费者也不需要知道.
- 对于RabbitMQ来说,⼀个RabbitMQBroker可以简单地看作⼀个RabbitMQ服务节点,或者RabbitMQ服务实例.⼤多数情况下也可以将⼀个RabbitMQBroker看作⼀台RabbitMQ服务器
Connection和Channel
Connection: 连接.是客⼾端和RabbitMQ服务器之间的⼀个TCP连接.这个连接是建⽴消息传递的基 础,它负责传输客⼾端和服务器之间的所有数据和控制信息.
Channel: 通道,信道.Channel是在Connection之上的⼀个抽象层.在RabbitMQ中,⼀个TCP连接可以 有多个Channel,每个Channel都是独⽴的虚拟连接.消息的发送和接收都是基于Channel的.
通道的主要作⽤是将消息的读写操作复⽤到同⼀个TCP连接上,这样可以减少建⽴和关闭连接的开销, 提⾼性能.
Virtual host
Virtual host: 虚拟主机.这是⼀个虚拟概念.它为消息队列提供了⼀种逻辑上的隔离机制.对于 RabbitMQ⽽⾔,⼀个BrokerServer上可以存在多个VirtualHost.
类似MySQL的"database",是⼀个逻辑上的集合.⼀个MySQL服务器可以有多个database
Queue
Queue: 队列,是RabbitMQ的内部对象,⽤于存储消息.
多个消费者,可以订阅同⼀个队列
一个消费者,也可以订阅多个队列
Exchange
Exchange: 交换机.message到达broker的第⼀站,它负责接收⽣产者发送的消息,并根据特定的规则 把这些消息路由到⼀个或多个Queue列中.
Exchange起到了消息路由的作⽤,它根据类型和规则来确定如何转发接收到的消息.
类似于发快递之后,物流公司怎么处理呢,根据地址来分派这个快递到不同的站点,然后再送到收件⼈⼿⾥.这个分配的⼯作,就是交换机来做的
RabbitMQ⼯作流程
流程:
- Producer⽣产了⼀条消息
- Producer连接到RabbitMQBroker,建⽴⼀个连接(Connection),开启⼀个信道(Channel)
- Producer声明⼀个交换机(Exchange),路由消息
- Producer声明⼀个队列(Queue),存放信息
- Producer发送消息⾄RabbitMQBroker
- RabbitMQBroker接收消息,并存⼊相应的队列(Queue)中,如果未找到相应的队列,则根据⽣产者 的配置,选择丢弃或者退回给⽣产者.
如果把RabbitMQ⽐作⼀个物流公司:
- Broker就类似整个物流公司的总部,它负责协调和管理所有的物流站点,确保包裹安全、⾼效地送达.
- Virtual Host可以看作是物流公司为不同的客⼾或业务部⻔划分的独⽴运营中⼼.每个运营中⼼都有⾃⼰的仓库(Queue),分拣规则(Exchange)和运输路线(Connection和Channel),这样可以确保不同客⼾的包裹处理不会相互⼲扰,同时提供定制化的服务
- Exchange就像是站点⾥的分拣中⼼.当包裹到达时,分拣中⼼会根据包裹上的标签来决定这个包裹 应该送往哪个⽬的地(队列).快递站点可能有不同类型的分拣中⼼,有的按照具体地址分拣,有的将包裹复制给多个收件⼈等.
- Queue就是快递站点⾥的⼀个个仓库,⽤来临时存放等待派送的包裹.每个仓库都有⼀个或多个快 递员(消费者)负责从仓库中取出包裹并派送给最终的收件⼈.
- Connection就像是快递员与快递站点之间的通信线路.快递员需要通过这个线路来接收派送任务 (消息).
- Channel就像是快递员在执⾏任务时使⽤的多个并⾏的通信线路.这样,快递员可以同时处理多个包裹,⽐如⼀边派送包裹,⼀边接收新的包裹