本章主要讨论RabbitMQ的架构模型,AMQP协议是什么,以及RabbitMQ和AMQP之间的关系,还会讨论消息从生产者发出和送达到消费者这一过程要经历哪些步骤。
RabbitMQ整体上是生产者与消费者模型,主要负责接收、存储、转发消息。
RabbitMQ的整体架构如图2-1所示。
图2-1 RabbitMQ整体模型架构
后面的章节开始对图中的组件进行详细介绍。
2.1消息生产者-消息消费者-Broker
(1)Producer:生产者,负责创建并投递消息。
生产者创建消息,然后发布到RabbitMQ中。消息一般可以包含2个部分:消息体和标签(Label):
(A)消息体也可以称之为payload,在实际应用中,消息体一般是业务数据,比如JSON字符串。
(B)消息的标签(Label)用来描述消息的信息,包含交换器的名称和路由键。生产者把消息交给RabbitMQ,RabbitMQ之后会根据标签的内容把消息发送给消费者(Consumer)。
(2)Consumer:消费者,负责接收和处理消息。
消费者连接到RabbitMQ服务器并订阅指定的消息队列。消息队列中的消息只保留了消息的消息体(payload),因为在消息路由的过程中,消息的标签(Label)会被丢弃,存入到消息队列中的消息只有消息体,消费者并不知道消息的生产者是谁。
(3)Broker:消息中间件的服务节点。
一个RabbitMQ Broker可以简单地看作是一个RabbitMQ服务节点,一个RabbitMQ服务实例,一个RabbitMQ服务器。
图2-2展示了生产者将消息存入RabbitMQ Broker,以及消费者从RabbitMQ Broker中消费的整个流程。
图2-2 消息队列的运转过程
首先生产者将业务数据封装成消息并发送(AMQP协议里对应的命令为Basic.Publish)到Broker中。消费者订阅并接收消息(AMQP协议里对应的命令为Basic.Consume和Basic.Get),获得消息中原始的业务数据后开始加工。为了MQ的运行效率,处理业务数据的线程并不一定和接收消息的线程是同一个线程,消费者进程可以使用A线程去接收消息,存入到内存中(比如使用Java中的BlockingQueue),再使用B线程从内存中读取数据进行业务处理,实现解耦,以异步执行的方式提高整个应用的数据处理效率。
如果你觉的这篇文章对你有用,记得点赞收藏,以防找不到我哦~