RabbitMQ的介绍

RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件。这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿里巴巴公司的,现已经转让给apache)。

RabbitMQ 作为目前应用相当广泛的消息中间件,在企业级应用、微服务应用中充当着重要的角色。特别是在一些典型的应用场景以及业务模块中具有重要的作用,比如​​业务服务模块解耦、异步通信、高并发限流、超时业务、数据延迟处理​​等。

消息中间件的工作过程可以用生产者消费者模型来表示、即,生产者不断的向消息队列发送信息,而消费者从消息队列中消费信息。具体过程如下:

SpringBoot 整合 RabbitMQ 消息队列_消息队列


从上图可看出,对于消息队列来说,​​生产者,消息队列,消费者​​​是最重要的三个概念,生产者发消息到消息队列中去,消费者监听指定的消息队列,并且当消息队列收到消息之后,接收消息队列传来的消息,并且给予相应的处理。消息队列常用于分布式系统之间互相信息的传递。对于RabbitMQ来说,除了这三个基本模块以外,还添加了一个模块,即​​交换机(Exchange)​​。它使得生产者和消息队列之间产生了隔离,生产者将消息发送给交换机,而交换机则根据调度策略把相应的消息转发给对应的消息队列。那么RabitMQ的工作流程如下所示:

SpringBoot 整合 RabbitMQ 消息队列_发送消息_02


紧接着说一下交换机。交换机的主要作用是接收相应的消息并且绑定到指定的队列​。

交换机有四种类型,分别为Direct、topic、headers、Fanout。

  • Direct是RabbitMQ默认的交换机模式,也是最简单的模式。即创建消息队列的时候,指定一个BindingKey。当发送者发送消息的时候,指定对应的Key。当Key和消息队列的BindingKey一致的时候,消息将会被发送到该消息队列中。
  • topic转发信息主要是依据通配符,队列和交换机的绑定主要是依据一种模式(通配符+字符串),而当发送消息的时候,只有指定的Key和该模式相匹配的时候,消息才会被发送到该消息队列中。
  • headers也是根据一个规则进行匹配,在消息队列和交换机绑定的时候会指定一组键值对规则,而发送消息的时候也会指定一组键值对规则,当两组键值对规则相匹配的时候,消息会被发送到匹配的消息队列中。
  • Fanout是路由广播的形式,将会把消息发给绑定它的全部队列,即便设置了key,也会被忽略。

 

RabbitMQ 官网拜读

首先,让我们先拜读 RabbitMQ 官网的技术开发手册以及相关的 Features,感兴趣的朋友可以耐心的阅读其中的相关介绍,相信会有一定的收获,地址可见:

​http://www.rabbitmq.com/getstarted.html​

阅读该手册过程中,我们可以得知 RabbitMQ 其实核心就是围绕 “消息模型” 来展开的,其中就包括了组成消息模型的相关组件:生产者,消费者,队列,交换机,路由,消息等!而我们在实战应用中,实际上也是紧紧围绕着 “消息模型” 来展开撸码的!

下面,我就介绍一下这一消息模型的演变历程,当然,这一历程在 RabbitMQ 官网也是可以窥览得到的!

SpringBoot 整合 RabbitMQ 消息队列_消息中间件_03

SpringBoot 整合 RabbitMQ 消息队列_发送消息_04

SpringBoot 整合 RabbitMQ 消息队列_消息队列_05

上面几个图就已经概述了几个要点,而且,这几个要点的含义可以说是字如其名!

  • 生产者: 发送消息的程序
  • 消费者: 监听接收消费消息的程序
  • 消息: 一串二进制数据流
  • 队列: 消息的暂存区/存储区
  • 交换机: 消息的中转站,用于接收分发消息。其中有 fanout、direct、topic、headers 四种
  • 路由: 相当于密钥/第三者,与交换机绑定即可路由消息到指定的队列!

正如上图所展示的消息模型的演变,接下来我们将以代码的形式实战各种典型的业务场景!

 

参考地址