跳到主要内容

RabbitMQ 简介

1. 前言

大家好,今天让我们开始一个新专题 — RabbitMQ。提起 RabbitMQ ,相信大家并不是很陌生,在基于任何一种语言框架所开发的项目中,大大小小都有可能用到。关于 RabbitMQ ,想必使用过的同学都有所耳闻,它的知识点完全可以出一本书来专门进行介绍,如果单靠本专题是介绍不完的。

本专题我们重点介绍 RabbitMQ 中的基本概念语法、基本术语、基本使用方法等一系列基本内容,不会涉及到很高级的用法。

在将基本内容全部讲解完毕后,我会结合我的经验以一个完整项目的形式,来为大家带来企业级 RabbitMQ 实战内容,旨在帮助大家,在掌握 RabbitMQ 基本知识体系之后,可以真正地将 RabbitMQ 应用到自己的实际工作中去。

本文我们主要先介绍一下 RabbitMQ 是什么?有哪些特性?优缺点在哪?为什么我们需要在项目开发中应用 RabbitMQ ?

2. 什么是 RabbitMQ ?

什么是 RabbitMQ 呢?在 RabbitMQ 官网中是这么介绍的:

一场使用消息进行通信的高可用和数据安全的在线会议. —官网

上述定义是官网的抽象描述,添加了一些官网的色彩在里面,同学们可能不太理解,下面我对定义进行一些必要的解释。

通俗来讲,我们可以这样理解:RabbitMQ 是一种消息通信方式,采用消息队列的形式,来将消息进行传递与发送,RabbitMQ 在通过消息队列传递消息时,可以保证消息的高可用性、消息中数据的安全性。

也就是说,RabbitMQ 是一种高可用且数据安全的消息通信中间件。

3. 为什么要使用 RabbitMQ

那么我们为什么要使用 RabbitMQ 呢?

3.1 通俗易懂的配置项

RabbitMQ 这一中间件并不像 Hystrix 那样,如果需要使用,就要先进行集成。RabbitMQ 本身是依赖于 erlang 语言,并不是 Java 语言,所以,如果我们的电脑上具备了 erlang 语言的环境,就可以使用 RabbitMQ 了,这一点是 Hystrix 等其他工具不具备的特性。

正是由于上述特性存在的原因,所以,RabbitMQ 的使用就相当灵活。由于本套教程是依赖于 Spring Boot 框架来介绍 RabbitMQ 的,所以,我们需要将 RabbitMQ 集成到 Spring Boot 框架中去。

RabbitMQ 针对不同的集成环境,提供了很多种不同的集成实现方案,而无论是哪一种集成方案,其配置项都不是很多,我们只需要将最基本的几个主要配置项进行简单配置,就可以使用 RabbitMQ 了。

在将 RabbitMQ 依赖引入到项目中后,由于 Spring Boot 框架的特性,我们不需要进行繁琐的 xml 文件的配置,只需要将和 RabbitMQ 相关的配置项以一个配置类的形式,或直接将其配置到配置源文件中去即可。

3.2 安全可靠的投递性

RabbitMQ 在进行消息传递的时候,会在其容器中进行一些必要的检测,来保证消息间通信的可靠性,具体 RabbitMQ 是怎样进行消息间通信的检测的,我们在本套课程中就不再介绍了,因为这涉及到 RabbitMQ 的底层实现,和课程初衷是不符的。

现在我们只需要这样理解就行了:当我们将一条消息放入到 RabbitMQ 中时,RabbitMQ 首先会检测消息所处的环境,然后 RabbitMQ 会将该条消息通过一定的加密算法进行加密,最后,通过 RabbitMQ 的消息通道,将消息投递到它该去的地方。

3.3 近于实时的补偿性

我们都知道,什么事情都不可能是十全十美的。抛开 RabbitMQ 不说,在互联网行业中的其他工具,也不能百分百保证每时每刻都在正常工作,更何况是涉及到消息通信的工具。RabbitMQ 在传递消息时,由于一些客观原因或者是其本身的原因,可能会出现,在有大批量消息传递时,所有的消息不能百分百传递到目的地的问题。

RabbitMQ 在设计之初就考虑到了这个问题的出现,所以,RabbitMQ 提供了内置的消息补偿机制,这里我们简单做一下介绍。

当存在大批量的消息都需要经过 RabbitMQ 来投递时,RabbitMQ 会将这些消息划分成若干组,然后通过为组设置顺序的方式,来依次投递这些消息。如果在任意一组中,出现了消息未能投递到目的地的现象,那么, RabbitMQ 会将该条消息进行短暂的存储,待其他消息都到达目的地后,RabbitMQ 会重新将该条消息进行投递,然而,这个过程执行的时间是微乎其微的,几乎近于实时。

3.4 考虑周全的监控性

在进行消息间投递工作时,如果能够在后台监控到每条消息的投递状况,想必是再好不过了。

鉴于此,RabbitMQ 为我们内置了消息监控台,RabbitMQ 内置的消息监控台可以看到每一条消息的健康情况,其为我们提供了图表形式、表格形式等,来很好地为我们展示每条信息地投递状况,包括但不限于:消息何时发送的、使用的是哪个通道、消息何时被接收的等关键监控属性,可以很好地为我们监控每条消息地投递情况。

总结:

RabbitMQ 其实就是为了解决消息间通信而诞生的一款消息中间件,其依赖于 erlang 语言,并广泛应用于 Spring Boot 框架,通过提供一系列必要的消息保障机制,来保证消息间可以安全可靠的进行通信。

4. RabbitMQ 的版本说明

RabbitMQ 从 2006 年诞生,到现在已经有 14 个年头了,在这中间已经迭代升级了很多版本,目前,最新的版本是 v3.8.8,每个版本都有不同的特性,下面介绍一个主要使用的版本和新版本的特性。

  • V3.5.X - 3.6.X:RabbitMQ 最初的流行版本,也是互联网公司最早采用的版本,现在还有一部分互联网公司在使用;
  • V3.6.X - 3.7.X: 互联网公司普遍使用的版本,也是使用人数较多的版本,较之前版本而言,对一些内置的特性做了优化;
  • V3.8.X: 目前发布的最新系列版本,也是大厂用的最多的版本,最新版本于 2020 年 9 月 3 日发布,最新版本较之前发布的版本更好用、更稳定、配置更灵活。

Tips: 鉴于此,本套课程采用 V3.8.5 版本进行讲解,请同学们务必和老师所使用的版本保持一致,以避免后续因为版本而引起的不必要的问题,以及一些兼容性问题。

5. RabbitMQ 的优点

  • 配置简单 : 支持通过配置类、yml 配置源文件的形式来对 RabbitMQ 进行配置。
  • 安全可靠 : 提供了丰富的消息保障措施,例如,消息加密、消息投递补偿、消息检测等,保证我们消息间安全可靠地投递。
  • 监控周全 : 提供了丰富的后台监控策略,通过不同的表现方式,来为我们提供消息的健康状况,方便我们监控。

6. RabbitMQ 的缺点

  • 有一定的不稳定性 : 经过长时间的使用可以得出,RabbitMQ 有时会出现消息补偿不及时、发送通道卡死等现象,但这不是经常发生的。
  • 速度还不是最快的 : 一般而言,RabbitMQ 本身的消息投递速度已经可以满足现实工作中绝大多数业务场景,在遇到复杂的业务场景时,比如,一次需要传递上万条数据时,消息间通信的速度可能就会达不到预期了,就需要我们对消息传递进行优化。

7. 学习基础

  1. 学习本门课程,首先需要对 Java 的 Spring Boot 框架有较为熟练的使用经验,并对 Maven 有一定的了解。
  2. 对 RabbitMQ 感兴趣的同学,或者对 RabbitMQ 消息中间件有简单了解或使用的同学。
  3. 知道什么是消息,并对消息间通信的基本概念有简单了解。

8. 总结

本小节详细介绍了 RabbitMQ 这一消息中间件,从 RabbitMQ 的定义开始,到 RabbitMQ 不同版本间特性差异的阐述,再到最后 RabbitMQ 的优缺点总结对比。

希望没有接触过 RabbitMQ 的同学,通过对本节内容的学习可以简单了解什么是 RabbitMQ ,以及它能为我们做哪些事情,本篇是整套课程的开端,希望各位同学能够持续关注,谢谢。