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

本小节详细介绍了 RabbitMQ 这一消息中间件,从 RabbitMQ 的定义开始,到 RabbitMQ 不同版本间特性差异的阐述,再到最后 RabbitMQ 的优缺点总结对比。
希望没有接触过 RabbitMQ 的同学,通过对本节内容的学习可以简单了解什么是 RabbitMQ ,以及它能为我们做哪些事情,本篇是整套课程的开端,希望各位同学能够持续关注,谢谢。
2、Windows 环境下 Spring Boot 集成 RabbitMQ 详解
1. 前言
本节会为大家介绍,如何在 Windows 环境下,基于 Spring Boot 框架集成 Rabbit MQ 消息通信中间件。之所以考虑使用 Spring Boot 结合 Rabbit MQ 来进行集成,主要是出于当下 Spring Boot 普遍流行的原因。
Spring Boot 框架集成 Rabbit MQ 消息通信中间件,是本套课程的开端,是学习 RabbitMQ 的基础,所以,希望各位同学都能完全掌握本小节内容。
本节主要内容:
Spring Boot 集成 RabbitMQ 消息通信中间件之前的准备工作;
Spring Boot 集成 RabbitMQ 消息通信中间件;
Spring Boot 集成 RabbitMQ 消息通信中间件是否成功的必要性测试。
让我们来看一下如何进行集成吧。
2. Spring Boot 集成 RabbitMQ 消息通信中间件之前的准备工作
通过第一节对 Rabbit MQ 的简介,我们可以知道,Rabbit MQ 是一个基于 erlang 语言编写而成的消息通信中间件,这就类似于我们的 Java WEB 原生框架,如果我们想在本地电脑中进行 Java WEB 项目的开发,那么我们首先需要在本地电脑中安装 Java 语言支持库。
同理,如果我们想在自己的本地电脑上使用 Rabbit MQ ,那么我们就需要在安装 Rabbit MQ 之前,先在自己的本地电脑上安装好 erlang 语言支持库,接下来就让我们来看一下如何安装 erlang 语言支持库。
2.1 准备工作 1:下载并安装 erlang 语言支持库文件包
erlang 官网针对不同平台,为我们提供了许多不同格式的文件包,我们可以根据自己所在平台来选择采用哪种格式的文件包,来安装 erlang 语言支持库。这里以 Windows 平台为例,打开这个链接:https://www.erlang.org/downloads 我们可以进到 erlang 的官网下载界面,如下图所示:

我们点击最新版本的 OTP 23.0 ,如上图红框处所示,即可开始下载,因为是从国外下载文件包,所以网速可能会有些慢,我们缓慢等待一会就好了。在下载好之后,我们会得到一个 .exe 的可执行文件,如下图所示:

双击打开该文件,默认全部勾选,我们不需要进行任何操作,点击 Next ,如下图所示:

在点击 Next 之后,需要我们选择 erlang 的安装路径,这个大家根据自己的实际情况进行选择即可,没有任何要求,如下图所示:

在选择好路径之后,我们继续点击 Next ,然后在弹出的界面中直接点击 Install 进行安装即可,如下图所示:

在点击 Install 之后,我们会进入安装过程提示界面,如下图所示,此时我们只需要等待安装完成就行了。

安装完成之后,我们会在安装过程提示界面看到如下红框所描述信息,代表我们已经把 erlang 语言支持库安装到我们的本地电脑中了,我们只需要点击 Close 按钮,关掉安装过程提示界面即可。

2.1 准备工作 2:配置 erlang 语言支持库环境变量
在安装好 erlang 语言支持库后,我们需要在本地电脑中配置 erlang 的环境变量,以至于可以全局使用 erlang 语言支持库。erlang 需要在电脑中配置两个环境变量,我们来看一下是哪两个。
Windows 系统下,我们可以右键 ‘此电脑’,找到属性,然后选择高级系统设置下的环境变量,点击新建,如下图所示:

在弹出的新建系统环境变量对话框中,我们填写环境变量名称,以及 erlang 的本地安装目录,如下图所示:

ERLANG_HOME : 表示环境变量的名称,这个是官方推荐的名字,大家也可以自定义该名称。
变量值 : 该变量值就是我们本地 erlang 的安装路径,注意是全路径,而不是相对路径。
填写完成后,点击确定,完成第一个环境变量的配置,接着我们来配置最后一个环境变量。
同样的,在系统变量下,找到 Path 属性,双击打开,在打开之后的对话框中的右上角,点击新建按钮,如下图所示:

点击新建之后,我们只需要将 erlang 语言支持库对应的 Path 属性地值填写进去就可以了,如下图所示:

上图红框位置就是我们添加的 erlang 的 Path 属性的值,为了方便,这里我把值放到下方,同学们直接复制就可以了。
这个值其实就是指向到了 erlang 本地安装目录的 bin 目录下,大家简单了解一下就行。
Tips: Windows 7 及以下的操作系统在填写 Path 属性值时,可能会出现对话框,如果是这种情况,我们只需要将 Path 属性的值放到末尾就可以了,在放之前记得先输入一个英文状态下的分号,即 ; 。
在配置完成环境变量之后,我们需要验证一下 erlang 是否已经可以全局使用了,打开命令行,Windows 系统下的快捷键是 Win + R 。
打开命令行之后,在里面直接输入 erl ,然后敲回车,如果可以看到我们安装的 erlang 的 Eshell 版本号,即表示 erlang 语言支持库已经被全局配置到了我们自己的本地电脑中,可以开始安装 RabbitMQ 了。

2.3 准备工作 3:下载并安装 RabbitMQ 消息通信中间件
首先,我们需要到 RabbitMQ 的官网去下载本套课程所使用版本的 RabbitMQ,由于 RabbitMQ 是在境外网站,很不好下载,所以我把下载好的文件包放到了 github 上,以下是地址,同学们可以直接访问该链接来获取文件包:
https://github.com/SteafanMrZhou/MoocSwaggerWiki/blob/master/rabbitmq-server-3.8.8.exe
在我们拿到文件包之后,双击该文件包,即可开始安装 RabbitMQ 的运行时环境- RabbitMQ-Server 。
整个安装过程与上述安装 erlang 语言支持库一样,这里不再赘述。
等待安装过程结束,看到如下截图,即说明 RabbitMQ 安装成功:

点击 Next 之后,我们直接点击 Finish 即可。

在安装成功之后,我们需要将本地的 RabbitMQ 服务启动起来,这里介绍最简单的一种方法。
在 Windows 环境下,我们需要为 RabbitMQ 安装一个插件,才可以正常访问 RabbitMQ 的监控台。
我们需要在 RabbitMQ 的安装目录下的 sbin 文件夹下来安装,命令如下:
rabbitmq-plugins.bat enable rabbitmq_management
看到如下截图即表示 RabbitMQ 服务启动成功

3. Spring Boot 集成 RabbitMQ 消息通信中间件
Tips: 注意,本套课程假定屏幕前的同学,你们已经在自己的电脑上搭建了一套可以正常运行的 SpringBoot 项目框架环境,如果你还没有完成这个潜在的要求,请先自行查阅资料,完成 SpringBoot 项目框架环境的搭建。
在完成集成前的准备工作之后,接下来我们来将 RabbitMQ 与 SpringBoot 框架进行集成了。本套课程使用的是 Maven 包管理工具,如果还有不熟悉该工具的同学,请自行了解,本套课程不做介绍。
使用 Maven 来集成 RabbitMQ ,首先,我们需要到 Maven 的中央仓库找到该依赖,出于方便考虑,我将该依赖项直接放到了下方,同学们可以直接拷贝。
Tips: 对于 amqp 协议,并没有严格的版本要求,但是,因为本套课程使用 RabbitMQ 的版本是 V3.8.8 ,所以,还是希望同学们可以使用 amqp V4.5 及以上更高版本。
这里没有指定依赖的版本,则默认使用最新版本。
等待 Maven 解析完成 RabbitMQ 依赖之后,没有任何红色的报错项,说明 RabbitMQ 的依赖已经成功安装到了 SpringBoot 框架中去,接下来我们需要验证 RabbitMQ 是否成功地与 SpringBoot 框架集成。
4. Spring Boot 集成 RabbitMQ 消息通信中间件是否成功的必要性测试
无论使用哪一种集成方式,验证 RabbitMQ 集成成功与否的方式都是类似下方的内容:
当我们的 Maven 包管理工具解析完成 RabbitMQ 的依赖之后,此时,需要运行我们的 SpringBoot 项目,在项目启动完成之后,我们可以在本地浏览器地址栏中,输入以下地址:
http://localhost:15672
如果看到 RabbitMQ 提示的登录信息框,如下图所示,则表示我们已经成功把 RabbitMQ 消息通信中间件集成到了 SpringBoot 框架中去了。

RabbitMQ 内置的默认账号和密码都是 guest ,我们可以登录进去看下,如下图所示:

Tips:1.各位同学请务必按照老师要求的内容来安装 RabbitMQ-Server ,当然,如果你足够清楚不同的安装包中的内容,那么,你可以通过下载 Binary 形式的完全安装包进行安装 RabbitMQ ,否则,请使用老师提供的安装包进行安装。2.在安装 RabbitMQ 之前,请确保 erlang 语言支持库已经成功安装,如果 erlang 语言支持库没有安装成功,请不要安装 RabbitMQ ,如果已经在错误的环境安装 RabbitMQ 导致报错,那么请完全删除掉已经安装的 RabbitMQ 内容,从头开始安装。3.请确保下载的 erlang 语言支持库的版本为 V23.0 最新版本,否则可能会导致 RabbitMQ 无法安装成功。4.由于 RabbitMQ 是基于 AMQP 协议的(后续会介绍),所以,Maven 依赖的名称为 amqp-client ,即 AMQP 客户端,这一点,同学们简单了解即可。5.在启动项目之前,请先启动自己本地电脑中的 RabbitMQ 服务,否则,项目无法启动。
5. 小结

本小节从RabbitMQ的依赖项开始,分步骤详细介绍了如何下载并安装erlang语言支持库、如何配置erlang环境变量、如何验证erlang是否安装成功、如何下载并安装RabbitMQ消息通信中间件等前置工作。
在介绍RabbitMQ如何与SpringBoot框架集成时,针对容易出错的地方做了详细的讲解和提示,最后,我们通过访问RabbitMQ内置监控台的形式来验证了RabbitMQ是否与SpringBoot框架成功集成。
根据本小节内容的特点,本小节通篇采用图文并茂的讲解方式,旨在帮助同学们可以理清每一部分内容,对小节中分步骤讲解的内容,可以更清楚地学习和掌握。最后,希望各位同学在安装RabbitMQ消息通信中间件时,可以一次性成功,感谢各位同学的关注与支持。
4、Linux 环境下 RabbitMQ 的安装与基础服务命令实操
1. 前言
我们都知道,我们项目的部署离不开 Linux 服务器,如果我们不会在 Linux 服务器上使用 RabbitMQ ,那么我们自己就不会部署带有 RabbitMQ 的项目,所以,出于项目部署与当下主流环境考虑,本节会为大家介绍如何在 Linux 环境下,安装 Rabbit MQ 消息通信中间件,并通过一些基本的 RabbitMQ 基础 Linux 服务命令来为大家介绍,如何在 Linux 服务器上对 RabbitMQ 做一些基本必要的操作。
本节主要内容:
Linux 环境下 RabbitMQ 的安装步骤;
安装成功与否的必要性测试;
RabbitMQ 基础 Linux 服务命令详解。
2. Linux 环境下 RabbitMQ 的安装
我们知道,如果我们想要在 Windows 环境下来安装 RabbitMQ ,需要我们首先安装 RabbitMQ 的依赖环境,即 erlang 语言支持环境,那么,在 Linux 环境下安装 RabbitMQ ,也需要我们首先来安装 erlang 语言支持环境。
Tips:\1. 本文所使用的 Linux 服务器版本为 CentOS 7 64 Bit 版本,请同学们务必和老师所使用的版本保持一致,否则可能因为 Linux 服务器版本问题而导致安装命令失效;\2. 出于操作简单考虑,本文使用基于 yum 源和 rpm 命令来完成各依赖的安装,如果同学们的 Linux 服务器上不支持这两个命令,请先自行完成这两个命令的安装。
2.1 在 Linux 环境下安装 erlang 语言支持库
在 Linux 环境下安装 erlang 语言支持库还是非常简单的,我们只需要通过以下几条命令即可完成安装:
第一步:初始化 erlang 资源库
第二步:安装 erlang 语言支持库
运行该条命令,在等待片刻之后,我们即可完成 erlang 语言支持库的安装。
第三步:校验 erlang 是否安装成功
校验 erlang 是否安装成功,我们只需要在 Linux 服务器上输入一个 erlang 语言的关键字即可,如下所示:
在输入 erl 关键字之后,我们会看到 erlang 语言的命令解释器,如下图所示:

当我们看到这个 erlang 语言命令解释器时,就说明我们的 erlang 语言支持库就已经安装成功了,接下来我们需要退出 erlang 语言命令解释器来安装 RabbitMQ ,退出命令如下所示:
退出 erlang 语言命令解释器后的界面如下图所示:

2.2 在 Linux 环境下安装 RabbitMQ 消息通信中间件
像安装 erlang 语言支持库那样,我们也需要几个步骤来安装 RabbitMQ 消息通信中间件。
第一步:RabbitMQ key 的导入
使用 rpm 的方式来安装 RabbitMQ 时,需要我们首先导入两个 key 到我们的 Linux服务器上,导入 key 的命令如下所示:
第二步:初始化 RabbitMQ 资源库
在将这两个 kye 导入完成之后,我们需要初始化 RabbitMQ 的资源库,初始化命令如下所示:
第三步:RabbitMQ 的安装
在初始化完成 RabbitMQ 的资源库文件之后,我们需要将 RabbitMQ 官网的安装包下载下来,并放到我们的服务器中,我们可以直接在服务器中使用 wget 来下载对应的安装包,命令如下:
等待安装包下载完成之后,我们就可以使用 rpm 命令来安装 RabbitMQ 了,安装命令如下所示:
等待安装过程结束,我们就完成了 RabbitMQ 消息通信中间件的安装。
Tips: 1. erlang 语言支持库的版本和 RabbitMQ 消息通信中间件的版本一定要保持一致,即保持在一个版本范围之内,这样我们才能顺利安装 erlang 和 RabbitMQ ,如果这两个版本不符合要求,那我们的 erlang 和 RabbitMQ 就不能正常安装成功,这点需要同学们注意;\2. 如果我们在安装 RabbitMQ 的过程中,出现了 nokey 或 socat 依赖未找到错误时,表明我们的 Linux 服务器中缺少对应的 key 或 socat 依赖没有安装,这种错误我们只需要将缺少的 key 导入或安装 socat 依赖即可,命令如下:
3. 安装成功与否的必要性测试
与 Windows 环境相同的是,检测 RabbitMQ 是否安装成功的方式,也是通过访问 RabbitMQ 的内置监控台来实现,如果我们可以正常访问 RabbitMQ 的内置监控台,就说明我们的 RabbitMQ 服务是安装成功且可用的。
与 Windows 环境不同的是,在经过上述安装过程之后,我们仅仅安装了 RabbitMQ 的 Server 服务,并没有安装 RabbitMQ 的内置监控台,所以,现在我们还不能访问 RabbitMQ 的内置监控台。
3.1 启用 RabbitMQ 内置监控台
在 Linux 环境中,RabbitMQ 消息通信中间件被拆分成了 Server 服务和客户端插件 Plugins 两部分内容,当我们安装好了 Server 服务之后,RabbitMQ 自带的一些 Plugins 也已经准备就绪了,其中,就包括 RabbitMQ 的内置监控台。所以,要想访问 RabbitMQ 内置监控台,我们只需要启动这一插件即可。
在 Linux 环境中,启用 RabbitMQ 内置监控台命令如下:
在启用了该插件之后,最后我们需要启动我们的 RabbitMQ 的 Server 服务,命令如下:
3.2 检查 RabbitMQ 是否安装成功
执行服务启动命令之后,Centos 7 下并不会打印任何启动日志,我们需要查询 RabbitMQ 服务的状态来确定 RabbitMQ 服务是否已经启动了,命令如下:
服务状态查询结果如下图所示:

当我们看到绿色字样的 running 单词时,表明我们的 RabbitMQ 服务已经正常启动了。
在 RabbitMQ Server 服务启动完成之后,我们就可以访问 RabbitMQ 的内置监控台了。当我们看到如下图所示效果时,就说明我们的 RabbitMQ 已经成功安装了:

4. RabbitMQ 基础 Linux 服务命令详解
在上述内容中,我们已经在 Linux 环境中安装好了 RabbitMQ 消息通信中间件,在安装过程中,涉及到了一些关于 RabbitMQ 的基础 Linux 命令,这些命令都表示什么意思呢,接下来让我们一探究竟。
基础 Linux 命令
命令:
解释:
该命令是 Linux 中使用非常频繁的命令之一,表示对具体的服务进行一些操作,其中,systemctl 为固定格式,operation 表示操作的类型,目前可选的类型有:start restart stop status,分别表示:服务启动、服务重启、服务停止、服务状态。
serviceName 表示服务的具体名称,这里的服务名称并不是我们通常所说的名称,而是存在于 Linux 系统中的特定服务名称,比如 RabbitMQ 服务,他的服务名称并不是 rabbitmq ,而是 rabbitmq-server 。
该命令主要对 Linux 中的具体服务进行相应操作,目前可操作的类型有:启动服务、重启服务、停止服务、查看服务状态。
基础 RabbitMQ 命令
命令:
解释:
该命令是 RabbitMQ 在 Linux 中独有的命令,其主要作用于 RabbitMQ 中的插件,其中,rabbitmq-plugins 为固定格式,operation 为操作的类型,目前可选的类型有:disable、enable,分别表示:禁用插件、启用插件;pluginName 表示 RabbitMQ 中插件的名称。
一般而言,我们使用 RabbitMQ 自带的插件就可以了,但是有些业务场景并不能很好地支撑,所以我们也可以自己安装一些第三方的 RabbitMQ 插件。
5. 小结

在本小节中,为大家介绍了在 Linux 环境下,安装 RabbitMQ 消息通信中间件的步骤。针对每个步骤中的每个过程都做了详细的介绍,针对在安装过程中容易出现问题的地方也做了相应的提示,在安装完成之后,针对在 Linux 环境下,常用的一些 Linux 命令和 RabbitMQ 命令都做了详细的介绍,旨在帮助同学们在 Linux 环境下安装 RabbitMQ 的过程中可以少踩一些坑。
4、Mac OS 系统下安装 RabbitMQ
1. 前言
Hello,同学们好,本节会为各位同学介绍在 Mac OS 系统环境下,如何安装 RabbitMQ 消息服务中间件,话不多说,让我们直入正题吧。
本节主要内容:
Mac OS 系统环境中两种常见安装方式介绍
使用 HomeBrew 安装 RabbitMQ
RabbitMQ 安装成功的必要性测试
2. Mac OS 系统环境中两种常见安装方式介绍
在开始安装 RabbitMQ 之前,先让我们来看一下,在 Mac OS 系统环境下都有哪几种常见的安装 RabbitMQ 的方法。
第一种安装方式,就是通过 Mac OS 系统中,自带的命令行中的 HomeBrew 来进行安装。 HomeBrew 是 Mac OS 系统自带的包管理工具,它通过非常简单的命令来管理 Mac 电脑中所有的依赖包,甚至是安装包,同时提供在线更新依赖、删除依赖的功能。
使用 HomeBrew 包管理工具来安装我们常用的依赖是非常方便的,我们只需要使用 brew 相关的命令,然后敲一下回车,HomeBrew 就会自动帮我们完成依赖包的下载、依赖包的校验,以及依赖包的安装,我们只需要静待安装结果就好了。
一般来说,我们的 Mac 电脑都是自带 HomeBrew 的,我们只需要输入 brew 命令来检测电脑中是否已经安装了 HomeBrew,如果我们在输入了 brew 命令之后,敲回车,电脑没有任何回应,或者提示 brew 命令未找到,说明我们的 Mac 电脑中还没有安装 HomeBrew ,此时,需要我们自己去下载 HomeBrew 的依赖包来安装。
在有的老版本的 Mac 电脑中,可能安装了旧版本的 HomeBrew ,这种现象体现在,当我们输入 brew 命令后,敲回车,命令行会给我们一个提示:brew 需要更新后才能正常使用,否则会造成无法更新或删除依赖。 此时,我们只需要按照提示来将电脑中的 HomeBrew 更新到最新版本即可。
第二种安装方式,就是自行下载我们所需依赖的完整依赖包,自行进行编译和安装。
此种安装方式首先需要我们自行寻找到我们的目标依赖所需的全部其他辅助依赖包,什么意思呢?这里我以安装 RabbitMQ 消息服务中间件为例:
要安装 RabbitMQ ,首先需要安装 Erlang 语言支持库(电脑中没有的情况下),而安装 Erlang 语言支持又有需要安装其他几个 Erlang 语言运行的辅助依赖包,于是我们就开始在互联网苦苦寻找,好不容易都找到了,但是在真正安装的时候,又因为 RabbitMQ 的版本与 Erlang 语言支持库的版本不兼容而导致无法继续安装,我们不得已又得重新开始找…
在重蹈覆辙无数次之后,我们终于安装好了 RabbitMQ ,但是此时已经深夜了,无意中又熬了一个难忘的夜晚,头发又掉了几根…
通过此种方式来安装 RabbitMQ 或其他依赖时,我们可以灵活的来选用各依赖包的版本,因为我们都知道,不同版本的依赖,其提供的特性也是不同的,这就是通过此种方式来安装 RabbitMQ 的优势所在。
但是,想要通过此种方式来安装 RabbitMQ 或其他依赖,需要同学们对所安装的依赖要有一个充分的了解才可以,还要知道我的目标依赖需要哪些辅助依赖才能完成安装,这对同学们提出了更高的要求。
以上就是 Mac OS 系统环境中,安装依赖的常见的两种安装方式,同学们可以根据自己的实际情况,来选择采用哪种安装方式。出于综合角度考虑,本节会采用以 HomeBrew 的方式来完成 RabbitMQ 消息服务中间件的安装,请同学们做好准备。
Tips: 1. 在以上两种安装方式中,第二种使用依赖包源码来安装的方式在 Mac OS 系统中已被逐渐淘汰,因为这种方式太过复杂,且不容易对依赖进行管理和维护;\2. 还有一种安装方式是通过 yum 或 yarn 这种包管理工具来安装,但是,Mac OS 系统中已经内置了 HomeBrew ,所以,此种安装方式也不是很流行。
3. 使用 HomeBrew 安装 RabbitMQ
在安装之前,请确保自己的 Mac 电脑中已经具备了 HomeBrew 包管理工具,具体的我们可以输入 brew 命令进行检查,在输入 brew 命令之后,出现下图提示,则说明 HomeBrew 已经在我们的电脑中了。

在确保 HomeBrew 已经安装之后,我们还需要对 HomeBrew 进行一个更新,这是在使用 HomeBrew 来安装依赖的前提操作,如果不更新 HomeBrew 直接来安装 RabbitMQ ,可能会出现版本不兼容的问题。
更新 HomeBrew ,我们只需要输入以下命令:
在运行该命令之后,我们的命令行标题会变为 curl ,此时表明电脑正在更新 HomeBrew ,需要我们稍等几分钟即可,如下图所示:

如果我们的 HomeBrew 已经很长时间没有使用了,那么在更新 HomeBrew 的时候,可能会报错:Error: Fetching /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core failed!
这种报错我们需要在命令行重新初始化我们的用户分组,以及运行 HomeBrew 的自行修复工具,命令如下:
执行完这些命令,我们的 HomeBrew 即可正常更新了。
当我们看到如下图所示的提示时,说明我们的 HomeBrew 已经更新完成了,接着,我们在命令行中输入以下命令来开始安装 RabbitMQ;

输入命令之后,我们需要稍等片刻,待命令行提示我们 rabbitmq installed successfully 时,就说明我们的 RabbitMQ 已经安装到了我们的 Mac 电脑中。
Tips: 1. 更新 HomeBrew 的时间根据自己的网速和本地 HomeBrew 中所安装的依赖大小和多少而定,普遍来说,速度都不是很快;\2. 使用 HomeBrew 的方式来安装 RabbitMQ 时,HomeBrew 会为我们自动下载最新合适版本的 Erlang 语言支持库,并且该版本 Erlang 语言支持库直接与要安装的 RabbitMQ 版本相对应,完全不用考虑版本兼容问题。
4. RabbitMQ 安装成功的必要性测试
通过 HomeBrew 将 RabbitMQ 安装到自己的 Mac 电脑中后,我们需要来对已经安装的 RabbitMQ 做一个验证,以检测我们的 RabbitMQ 是否安装成功,且可以正常使用了。
验证的方法很简单,我们需要在命令行启动 RabbitMQ 服务,命令如下:
输入以上命令之后,看到命令行如下图所示的提示,则表明 RabbitMQ 服务启动成功了:

然后我们在本机浏览器中,访问以下地址,如果可以打开 RabbitMQ 的管控台界面,说明我们的 RabbitMQ 服务已经成功安装到了我们的 Mac 电脑中,且可以愉快的玩耍了。

Tips: RabbitMQ 自带的默认管控台登录用户和密码均为 guest ,同学们如果感兴趣可以使用 guest 登录进去,看看里面的世界是什么样的。
5. 小结

本小节通过图文并茂的方式,为各位同学介绍了如何在 Mac OS 环境中安装 RabbitMQ 消息服务中间件。我们从 Mac OS 环境常见安装方式开始,详细介绍了 Mac OS 环境中常见的两种依赖安装方式,并分析了两种安装方式的利弊,供同学们斟酌使用。
接着,为各位同学介绍了如何使用 HomeBrew 来安装我们的 RabbitMQ 消息服务中间件,并介绍了使用 HomeBrew 来安装依赖包的前提操作,以及 RabbitMQ 安装完成后的验证操作。希望同学们可以根据本节内容的顺序来完成 Mac OS 系统环境下 RabbitMQ 的安装,预祝各位同学们一气呵成。
5、RabbitMQ 核心基础概念详解
1. 前言
Hello,大家好。本节会为同学们介绍 RabbitMQ 中的核心基础概念。这些核心基础概念组成 RabbitMQ 的基本元素,贯穿整个 RabbitMQ 的始终,如果我们不了解这些基础概念,那么当我们在使用 RabbitMQ 时,就会一脸懵,所以,在使用 RabbitMQ 之前,充分了解 RabbitMQ 的这些基础概念是非常有必要的。
本节主要内容:
AMQP 协议与 RabbitMQ 的联系;
RabbitMQ 基础概念梳理;
RabbitMQ 基础概念详解。
希望各位同学可以完全理解本节内容,这对学习 RabbitMQ 有着至关重要的作用。
2. AMQP 协议与 RabbitMQ 的联系
2.1 什么是 AMQP 协议
说起 AMQP 协议,我们可能会感到有点陌生,那么为什么还要了解 AMQP 协议呢? 因为了解什么是 AMQP 协议可以为我们学习 RabbitMQ 打下知识基础,让我们很清楚的知道 RabbitMQ 是用来做什么的。
AMQP 协议,即 Advanced Message Queuing Protocol,直译为高级消息队列协议,我们只要知道 AMQP 协议就是一个高级消息队列协议就行了。
2.2 与 RabbitMQ 的联系
AMQP 协议由三大模块组成,分别是交换机、消息队列、消息队列路由。通过这三大模块间的配合,可以实现对消息的发送、消息的监听等功能。
RabbitMQ 就是借鉴了 AMQP 协议的组成模块,在 AMQP 协议的基础上,对这些模块进行整合、拓展,并最终形成了基于 erlang 语言和 AMQP 协议的一个完备的消息中间件,因此,在 RabbitMQ 中,有些基础概念是和 AMQP 协议中的是几乎一样的,而有些概念确是 AMQP 协议中没有的。
而无论 AMQP 协议中有没有其他的概念,在这里会一并介绍。
3. RabbitMQ 基础概念梳理
在详细开始介绍 RabbitMQ 的基础概念之前,让我们先来看一下,在 RabbitMQ 中都有哪些基础概念需要我们知道。
| 序号 | 名称 |
|---|---|
| 01 | 消息 |
| 02 | 虚拟主机 |
| 03 | 交换机 |
| 04 | 路由 Key |
| 05 | 频道 |
| 06 | 消息队列 |
| 07 | 生产者 |
| 08 | 消费者 |
Tips: 上述清单中的生产者与消费者概念,并不是 RabbitMQ 中特有的概念,考虑到学习本课程的同学基础,在这里就一并进行介绍了。
4. RabbitMQ 基础概念详解
4.1 生产者与消费者
定义:
在了解什么是生产者与消费者时,我们可以先不从计算机专业的角度考虑什么是生产者与消费者,我们可以先来了解它们的字面意思。从生活角度考虑,生产者就是生产某某东西的人,而消费者就是消费某某东西的人,它们两个一个是生产,一个是消费,且保持着一种先生产后消费的关系。
针对于计算机专业角度来说,生产者就是生产一条数据的手段或者途径,而消费者则是消费一条数据的手段或者途径。在 RabbitMQ 中,生产者指的就是具备生产一条消息能力的方法,消费者指的就是具备消费一条消息能力的方法。
代码实现:
那么我们如何在 RabbitMQ 中来定义一个生产者和一个消费者呢?接下来就让我们来看一下 RabbitMQ 中生产者与消费者的基础通用 API :
在 RabbitMQ 中要想声明一个生产者,我们首先需要与 RabbitMQ Server 建立通信,即将我们的应用程序与 RabbitMQ 的服务器建立链接,如下代码所示:
代码解释:
第 1 行,我们实例化了一个 RabbitMQ 的链接工厂,这是与 RabbitMQ 服务器建立链接的必要基础操作。
第 2-3 行,我们使用我们实例化的链接工厂中的 setHost 和 setPort 方法来设置我们需要链接的 RabbitMQ 服务器的 ip 地址,以及端口号,RabbitMQ 服务默认的端口号为 5672。
第 4 行,在将 RabbitMQ 服务的 host 和 port 设置完毕后,我们使用 connectionFactory 的 newConnection 方法来创建出了一条链接,并返回我们连接 RabbitMQ 服务的 connection 信息。
在建立好连接之后,我们就可以向 RabbitMQ 中发送消息了,如下代码所示:
现阶段,在上段代码中,我们只需要了解最后一行代码所表示的含义即可。
代码解释:
第 3 行,我们使用了 channel 的 basicPublish 方法来将我们定义的 msg 消息投递到 RabbitMQ 中,其中, basicPublish 方法的第一个参数表示交换机的名称,第二个参数表示路由 Key 的名称,第三个参数表示消息所设置的参数,第四个参数表示将我们的 msg 数据转换为 bytes 之后再进行投递。
通过上述代码,我们就实现了 RabbitMQ 的生产端,那消费端又该如何实现呢?
代码实现:
代码解释:
第 1 行,我们根据生产者声明的路由 Key ,定义了一个名为 queueName 的变量,来接收路由 Key 。
第 2 行,我们使用 channel 的 queueDeclare 方法,来声明一个名为 queueName 的队列。
第 3 行,我们对 RabbitMQ 中用来接收消息的 Consumer 进行初始化。
第 4 行,我们使用 channel 的 basicConsume 方法,来讲我们投递到 RabbitMQ 中的消息进行消费。
Tips 在这里,我们只是对 RabbitMQ 中如何实现生产端与消费端进行一个简单的了解,后续会进行深入介绍。
4.2 消息
定义:
消息,顾名思义,就是我们平常所说的一条信息、一条数据,消息是 RabbitMQ 中的核心元素,我们产生的任何数据,在 RabbitMQ 中都被称为消息。
在整个 RabbitMQ 工作流程中间,有且只有消息被流转,我们使用 RabbitMQ 的目的就是来处理我们应用程序中需要 RabbitMQ 来处理的任何消息,该消息可以是一句话,可以是一张图片,可以是一条视频,也可以是一种文档。
4.3 虚拟主机
定义:
虚拟主机,即 Virtual Host ,是用来存储 RabbitMQ 中所有消息数据的集合,每个 RabbitMQ 服务中默认只有一台虚拟主机,并且提供用户自定义虚拟主机的功能。
我们可以这样理解:RabbitMQ 中的每个虚拟主机都是一台数据库,在这个数据库中会存储 RabbitMQ 的交换机、频道、路由 Key ,以及消息队列,每一个虚拟主机是一个独立的单元,各虚拟主机之间不会相互干扰,各自完成各自的任务。
代码实现:
在 RabbitMQ 中,默认的虚拟主机为 “/” ,即如果我们不指定我们的虚拟主机,则所有的消息都会存储到名称为 “/” 的虚拟主机下,而我们如何使用虚拟主机呢?如下代码所示:
代码解释:
第 2 行,我们使用 RabbitMQ 链接工厂的 setVirtualHost 方法,来为我们的链接指定一个虚拟主机,而指定的虚拟主机就是 RabbitMQ 所提供的默认虚拟主机。
Tips:\1. 一般来说,每一个应用程序或者每一个独立的业务模块,都会创建属于自己领域的虚拟主机,目的就是为了和其他业务模块分离开,同时,这样的架构模式更利于不同业务数据的统计与维护,在线上环境中,也更利于我们同学排查业务故障。\2. 如果你不知道你的应用程序该如何划分虚拟主机,那就请使用 RabbitMQ 自带的默认虚拟主机,这一点是很重要的。
4.4 交换机
定义:
交换机,即 exchange ,是传递消息的中间工具,我们可以把交换机理解为,传递消息的媒介,即我们发到 RabbitMQ 服务器中的消息,在经过虚拟主机之后,会首先到达 exchange 中,然后由 exchange 根据不同的匹配策略来将消息传递到对应的频道中去。
针对不同的业务场景,RabbitMQ 为我们内置了多种交换机供我们选择,这里只是对交换机的概念做一个简单的介绍,后续我们再详细介绍 RabbitMQ 中所有的交换机。
代码实现:
我们应该如何选择一种交换机呢?如下代码所示:
代码解释:
第 1 行,我们使用了 channel 的 exchangeDeclare 方法,来选择了一种类型的交换机,该交换机类型为直接交换机,方法的第一个参数表示交换机的名称,我们可以根据实际情况自定义交换机名称,方法的第二个参数为交换机的类型,这个我们不可以自定义,必须要和 RabbitMQ 中所支持的交换机类型的名称保持一致才行。
4.5 路由 Key
定义:
路由 Key ,即 routing key ,交换机与频道之间进行绑定的 key ,通过这个 key ,可以实现消息由交换机转移至频道的过程,从而实现消息的流转。
在同一个虚拟主机中,不能存在相同路由 key 的 key 值。
代码实现:
我们应该如何定义 routing key 呢?如下代码所示:
代码解释:
第 1 行,我们使用了 channel 的 basicPublish 方法,上述内容中已经对该方法进行了介绍,现在让我们直接来看该方法的第二个参数,第二个参数表示我们路由 key 的名称,这里为 test_routing_key 。
4.6 频道
定义:
频道,即 channel ,我们可以理解为传递消息的通道,在 RabbitMQ 中,消息最终经过 channel 发送给对应的消费者,消费者接收到消息并将该消息进行消费。
代码实现:
我们应该如何定义 channel 呢?如下代码所示:
代码解释:
第 4 行,在由 ConnectionFactory 构建出一个连接后,我们使用了 connection 的 createChannel 方法来通过建立好的连接创建一个频道。
4.7 消息队列
定义:
消息队列,即消息所在的场所。在 RabbitMQ 中,不可能只存在一条消息,那么当存在多条消息时,RabbitMQ 会将这些消息组成一个队列,用来存放同一领域下的消息,这个队列就被称为消息队列。
当生成消息队列时,RabbitMQ 会根据不同的消息匹配策略,将不同领域的消息划分到对应的消息队列中去。消费者可以获取消息队列中的消息并消费,且我们可以通过设置一个阀值来规定我们同一时刻消费者需要消费的消息条数,这在高并发环境中是很重要的。
5. 小结

本小节详细介绍了 RabbitMQ 中的基础核心概念,包括消息、虚拟主机、交换机、路由 Key 、频道、消息队列、生产者、消费者,针对可以通过代码实现的基础核心概念,做了代码实现和代码解释,旨在帮助同学们在对理论知识有一定认知的同时,可以对相应概念的代码实现也有一个了解。
本小节是学习 RabbitMQ 的基础,在学习本节内容时,一定要理清楚本节中所涉及的所有的概念,同学们只有对这些概念有所了解之后,才能开始 RabbitMQ 的学习,各位同学加油。




