第二章 RabbitMQ介绍

1、RabbitMQ简介

RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。RabbitMQ最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

rabbit- 兔子,兔子的特点是什么? 轻盈,跳跃,灵活,速度快,也象征着这款MQ的特征-轻量级,高性能,所以起个好听的名字也很重要。

此文字为官网中对mq的介绍,这里重点是broker -按翻译意思是中间人、代理人也就是中介的意思,大家想,其实mq就是对消息处理的一个中介一个代理而已,A->queue->B , 像不像大家去买房租房找中介的场景,A与B不再交互,而是通过一个中间人的角色,A把消息给queue,queue把消息推给B,或B来queue去取。message broker= 消息代理, 那rabbitmq 也就是个消息代理中间件。


2、AMQP 简介

 那rabbitmq 遵循的协议是AMQP。

AMQP :Advanced Message Queue Protocol,高级消息队列协议。它是应用层协议的一个开放标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不受产品、开发语言等条件的限制。

如何证明呢?为什么说rabbitmq交互就使用了AMQP协议,我们可以使用 WrieShark 抓包看看:

rabbitmq入门demo rabbitmq operator_官网

大家也可以去下载对应的协议文档,做一次研读,例如我们常用的AMQP0-9-1

2、RabbitMQ架构

rabbitmq入门demo rabbitmq operator_rabbitmq入门demo_02

2.1 rabbitmq 模块内容

如上图相关模块介绍如下:

  • 生产者(Producer):发送消息的应用。
  • 消费者(Consumer):接收消息的应用。
  • 队列(Queue):存储消息的缓存。
  • 消息(Message):由生产者通过RabbitMQ发送给消费者的信息。
  • 连接(Connection):连接RabbitMQ和应用服务器的TCP连接。
  • 信道(Channel):连接里的一个虚拟通道,通过消息队列发送或者接收消息时,都是通过信道进行的。
  • 交换机(Exchange):交换机负责从生产者那里接收消息,并根据交换类型分发到对应的消息队列里。
  • 绑定(Binding):绑定是队列和交换机的一个关联连接。
  • 路由键(Routing Key):路由键是供交换机查看并根据键来决定如何分发消息到队列的一个键,路由键可以说是消息的目的地址。
  • 代理(Broker):接收和分发消息的应用,RabbitMQ Server就是Message Broker。
  • 虚拟主机(Virtual host):出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue 等。

2.2 rabbitmq工作原理

  1. 生产者与服务器建立Connection链接
  2. 在Connection 链接内创建信道Channel
  3. 生产者通过信道把消息发送给交换机
  4. 交换机接收消息并且负责对消息进行路由,交换机根据消息的属性来把消息分发到不同的队列上;
  5. 消息会一直留在队列里直到被消费者消费

所以这里的重点是生产者将消息发送给了交换机,并非直接发到queue,而通过不同的交换机能实现不同的效果。后续介绍的重点就是此处。

【当创建交换机时需要指定类型(四种类型:直接Direct,扇出Fanout ,主题Topic ,消息头Headers )】

2.3 rabbitmq模型

对于初学者,大家可能对这些概念容易混淆也不太好记忆,为了便于大家理解,我做了个模型。大家都对太阳能热水器不陌生吧,有没有觉得上面的mq架构图,用这个热水器来理解。

rabbitmq入门demo rabbitmq operator_官网_03

有没有很贴切,哈哈,^_^,咱们从左往右看

  • Producer=水龙头 -水龙头给热水器上水  
  • Message = 水
  • Connection = 保温层,冬天怕冻,我们先套一层保温
  • Channel=pvc 管,这是直接走水的,也是创建在保温层里面的
  • Exchange= 上水开关-加个开关多层控制
  • Queue=热水器桶 -保存水 先进的水先出去
  • Consumer=淋浴器-小明可以痛快洗澡了

打开水龙头上水,小明直接洗冷水澡,存着水晒热后,小明再洗热水澡

3、RabbitMQ安装

rabbitmq安装不再重点介绍,此步骤需要将mq安装到本地或服务器即可。

另外配置好对应的用户,配置好使用的Virtual Host,为后续程序的连接做好准备!