Linux云计算运维架构师(连载)-消息队列-RabbitMQ-04

2021-07-06 11:04:46 浏览数 (1)

l Queue

消息队列,用来保存消息,直到发送给消费者,是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一致在队列里面,等待消费者连接到这个队列将其取走。

l Bingding

绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键,将交换器和消息队列连接起来的路由规则,所以可以将交换器理解为一个由绑定构成的路由表。

l Virtual Host

虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器区域。也就是说虚拟主机、交换器、队列、绑定等是通过虚拟机来实现的。每个Vhost本质上就是一个mini版的RabbitMQ服务器,拥有自己的队列、交换器、绑定和权限机制。Vhost是AMQP概念的基础,必须再连接时指定,RabbitMQ默认的vhost是"/"。

l Broker

可以理解为RabbitMQ的服务器实体,可以理解为在Linux上创建的虚拟机实体。

l Connection

连接,可以理解为RabbitMQ服务器和服务建立的TCP的连接。

l Channel

信道,也可以称为管道,是TCP里的虚拟连接。一条TCP连接,可以包含很多条的Channel。假设TCP是电缆,信道是一条独立光纤束,一条TCP连接上创建多少条信道是没有限制的。TCP一旦打开,就会创建AMQP信道,无论是发布消息、接收消息、订阅消息,这些动作都是通过信道完成的。

l Consumer

消息的消费者,表示一个从消息队列中取得消息的客户端应用程序,和Producer类似,可以简单理解为就是一个Java程序。

5.1.4 RabbitMQ的通信过程

其实RabbitMQ就是一个生产者与消费者模型,主要负责接收、存储和转发消息。可以把消息传递的过程想象成收发快递的过程,发件人将一个包裹送到快递站,快递员会暂存并最终将该快递通过快递员送到收件人的手上。RabbitMQ就好比由快递公司、快递站和快递员组成的系统。从计算机术语层面来说,RabbitMQ模型更像是一种交换机模型。RabbitMQ的架构如图5.3所示。

图5.1 RabbitMQ架构

其通信过程大致可以分为以下五步。

(1) 消息生产者生产消息,发送给RabbitMQ系统中的交换器;

(2) 交换器收到消息,根据ROUTINKEY,将消息转发给匹配的队列;

(3) 消息队列收到消息,将消息发送给匹配的消息消费者;

(4) 消息消费者收到消息,发送ACK给队列确认收到消息;

(5) 消息队列收到ACK,删除队列中缓存的此条消息。

5.1.1 RabbitMQ的应用场景

RabbitMQ的使用场景,其实也就是消息队列的使用场景,主要有以下四种。

1. 解耦,比如系统A会交给系统B去处理一些事情,通过将A、B中间加入消息队列,A将要处理的事情交给消息队列,B的输入来源于消息队列。系统可以利用RabbitMQ来对用户的请求进行解耦。

2. 保证顺序,遵循先来先处理,比如一个系统处理某件事需要很长一段时间,但是在处理这件事情时候,有其他人也发出了请求,可以把请求放在消息队里,一个一个来处理。

3. 消息路由,按照不同的规则,将队列中消息发送到不同的其他队列中。

4. 异步处理,处理一件事情,需要甲先做A,然后做乙丙丁分别处理B、C、D,B、C、D这三件事情在A之后,但是相互之间没有关联。此时甲处理A之后,把事件发送到消息队列里边,乙丙丁接受到事件之后再分别处理B、C、D。

0 人点赞