全部开发者教程

RabbitMQ 入门教程

RabbitMQ 简介
RabbitMQ 简介

RabbitMQ 消息发送原理概述

1. 前言

Hello,大家好。今天会为同学们介绍 RabbitMQ 的消息发送原理,RabbitMQ 消息发送原理展开来说有太多内容了,完全可以专门作为一门独立的课程存在,所以,本节只会从宏观层面来介绍 RabbitMQ 的消息发送原理,太深的概念并不会涉及。

在了解了如何使用 RabbitMQ 来发送消息之后,简单了解 RabbitMQ 消息发送的原理是非常有必要的,它能够帮助我们定位排查一些 RabbitMQ 出现的问题,所以就让我们来看看 RabbitMQ 到底是如何来发送消息的吧。

本节主要内容:

  • RabbitMQ 整体架构解析;

  • RabbitMQ 消息发送原理概述;

2. RabbitMQ 整体架构解析

RabbitMQ 整体架构是基于 AMQP 协议的,结合 AMQP 协议的架构模型,我们可以得出 RabbitMQ 的整体架构,RabbitMQ 整体架构如下图所示:

消息这一元素在 RabbitMQ 中虽然至关重要,但消息只是 RabbitMQ 处理的目标,并不能作为 RabbitMQ Server 的组成部分,所以,在上图中,我并没有引入消息这一概念,目的就是让各位同学能够看清楚 RabbitMQ Server 的架构到底是什么样的,即 RabbitMQ Server 都是由哪些元素或组件所组成的。

我们都知道,RabbitMQ Server 就是我们的 RabbitMQ 服务器,在 AMQP 协议中,RabbitMQ Server 又被称为 Broker ,这点同学们需要了解。

由图可知,RabbitMQ Server 由 Virtual Host 、Exchange 、Channel 、Queue 四大核心组件所组成。 在核心基础概念小节中,我们已经对这四大核心组件做了相应的介绍,这里就不再赘述了,如果有不清楚的同学,可以到核心基础概念小节中做相应了解。

在一个 RabbitMQ Server 中,只有一个 Virtual Host ,在一个 Virtual Host 中,可以有多个不同名称的 Exchange ,而一个 Exchange 可以与多个 Channel 进行绑定,同时,一个 Queue 也可以和多个 Channel 进行绑定。

即,在一个 RabbitMQ Server 中,有且只有一个 Virtual Host ,在一个 Virtual Host 中,存在多个 Exchange 和 Channel ,以及多个 Queue , 这个对应关系需要同学们知道。

Tips: 关于 RabbitMQ 的整体架构,我们只需要了解到这一层次即可,即我们只要知道了 RabbitMQ Server 都是由哪些元素构成的,以及这些元素的包含关系即可。

3. RabbitMQ 消息发送原理概述

在对 RabbitMQ 的整体架构有一个宏观了解之后,我们还需要对 RabbitMQ 的消息发送原理也有所了解,知道消息在 RabbitMQ Server 是怎样流转的。

同样地,RabbitMQ 消息的发送原理也是基于 AMQP 协议中消息的发送原理,结合 AMQP 消息的发送原理(同学们不需要知道),我们可以得出 RabbitMQ 消息的发送原理。

我们先来看一下,结合 RabbitMQ 整体架构而得出的 RabbitMQ 消息发送原理是怎样的,如下图所示:

由此图,我们可以得出 RabbitMQ 消息发送的步骤:

第一步,生产者将消息生产出来,并将消息发送到 RabbitMQ Server 上,即我们发到 RabbitMQ 中的消息,会首先置于 RabbitMQ Server 中;

第二步,RabbitMQ Server 根据客户端所发来的连接请求,判断将消息传递到哪个 Virtual Host 中,如果我们在连接 RabbitMQ Server 时,没有设置要连接的 Virtual Host 地址,则 RabbitMQ Server 会将我们的消息传递到地址为 “/” 的 Virtual Host 中去;

第三步,在将消息传递到对应的 Virtual Host 中后,Virtual Host 会继续解析我们的连接请求,并在这一步解析出我们需要的 Exchange 的类型,以及 Channel 的名称,Queue 的名称,以及消息和 Exchange 之间是否有 routing_key ,Channel 和 Queue 之间是否有 bidding_key 这些信息;

第四步,Virtual Host 会根据解析出来的这些信息,将消息和 Exchange 进行匹配,相应的,Exchange 也会和对应的 Channel 进行匹配,并最终将 Queue 和 Channel 进行绑定,使消息进入到对应的消息队列中去;

第五步,待消息进入到对应的消息队列中之后,RabbitMQ Server 会返回给我们一个确认应答(确认应答后续会进行介绍),来通知我们,消息已经成功被 RabbitMQ Server 所发送,于是,消费者变回根据一定的策略来从消息队列中获取消费,并最终将该消息消费掉,消息消费之后,也会给我们返回一个确认应答(确认应答后续会进行介绍),告诉我们消息已经成功消费掉了。

以上就是 RabbitMQ 进行消息发送的先后步骤,为了更直观地为各位同学呈现 RabbitMQ 的消息发送原理,我做了一个流程图给大家,如下图所示:

同学们可以根据上述步骤,结合流程图进行学习和验证。

4. 小结

本小节为各位同学介绍了 RabbitMQ 的整体架构,以及 RabbitMQ 的消息发送原理,出于课程设计的初衷,本小节并没有从源码层面对 RabbitMQ 的消息发送原理做深入地剖析,同学们只需要对 RabbitMQ 的消息发送原理做宏观层面上的了解即可。

通过介绍 RabbitMQ 的整体架构,同学们需要了解 RabbitMQ Server 都由哪些主要元素构成,以及他们之间的包含关系。了解 RabbitMQ 的整体结构以及 RabbitMQ Server 的消息发送步骤是应用好 RabbitMQ 的前提,希望同学们注意。