我快要疯掉了竟然还有人不会在各种环境下安装RabbitMQ,袁庭新老师带你一文搞定
最近有很多小伙伴在后台私信说,在不同的环境下安装RabbitMQ总是遇到各种问题,最终导致RabbitMQ安装失败,怎么破?为了给大家解答这些问题,所以本文新哥就如何在ARM架构、X86架构和Window系统下安装RabbitMQ进行详细介绍,必须得给你安排的明明白白。
01 为什么要使用消息服务
在安装RabbitMQ之前,先跟着新哥回顾下,我们为什么要使用消息服务?
在多数应用尤其是分布式系统中,消息服务是不可或缺的重要部分,它使用起来比较简单,同时也给我们解决了不少难题,例如异步处理、应用解耦、流量削锋、分布式事务管理等,使用消息服务可以让我们实现一个高性能、高可用、高扩展的系统。接下来我们就通过实际开发中的若干场景,来分析和说明为什么要使用消息服务,以及使用消息服务的好处。
1.1 异步处理
场景说明:用户注册后,系统需要将信息写入数据库,并发送注册邮件和注册短信通知。下面我们使用图示的方式直观展示上述场景的不同处理方式。

针对上述注册业务的场景需求,处理方式有3种。
串行处理方式:用户发送注册请求后,服务器会先将注册信息写入数据库,依次发送注册邮件和短信消息,服务器只有在消息处理完毕后才会将处理结果返回客户端。这种串行处理消息的方式非常耗时,用户体验不友好。
并行处理方式:用户发送注册请求后,将注册信息写入数据库,同时发送注册邮件和短信,最后返回给客户端,这种并行处理的方式在一定程度上提高了后台业务处理的效率,但如果遇到较为耗时的业务处理,仍然显得不够完善。
消息服务处理方式:可以在业务中嵌入消息服务进行业务处理,这种方式先将注册信息写入数据库,在极短的时间内将注册信息写入消息队列后即可返回响应信息。此时前端业务不需要理会不相干的后台业务处理,而发送注册邮件和短信的业务会自动读取消息队列中的相关消息进行后续业务处理。
1.2 应用解耦
场景说明:用户下单后,订单服务需要通知库存服务。下面我们使用图示的方式直观展示此需求的不同处理方式。

如果使用传统方式处理订单业务,用户下单后,订单服务会直接调用库存服务接口进行库存更新,这种方式有一个很大的问题是:一旦库存系统出现异常,订单服务会失败导致订单丢失。如果使用消息服务模式,订单服务的下订单消息会快速写入消息队列,库存服务会监听并读取到订单,从而修改库存。相较于传统方式,消息服务模式显得更加高效、可靠。
1.3 流量削峰
场景说明:秒杀活动是流量削峰的一种应用场景,由于服务器处理资源能力有限,因此出现峰值时很容易造成服务器宕机、用户无法访问的情况。为了解决这个问题,通常会采用消息队列缓冲瞬时高峰流量,对请求进行分层过滤,从而过滤掉一些请求。

针对上述秒杀业务的场景需求,如果专门增设服务器来应对秒杀活动期间的请求瞬时高峰的话,在非秒杀活动期间,这些多余的服务器和配置显得有些浪费;如果不进行有效处理的话,秒杀活动瞬时高峰流量请求有可能压垮服务,因此,在秒杀活动中加入消息服务是较为理想的解决方案。通过在应用前端加入消息服务,先将所有请求写入到消息队列,并限定一定的阈值,多余的请求直接返回秒杀失败,秒杀服务会根据秒杀规则从消息队列中读取并处理有限的秒杀请求。
1.4 分布式事务管理
场景说明:在分布式系统中,分布式事务是开发中必须要面对的技术难题,怎样保证分布式系统的请求业务处理的数据一致性通常是要重点考虑的问题。针对这种分布式事务管理的情况,目前较为可靠的处理方式是基于消息队列的二次提交,在失败的情况可以进行多次尝试,或者基于队列数据进行回滚操作。因此,在分布式系统中加入消息服务是一个既能保证性能不变,又能保证业务一致性的方案 。
针对这种分布式事务处理的需求,下面我们以图示的方式展示使用消息服务的处理机制。

针对上述分布式事务管理的场景需求,如果使用传统方式在订单系统中写入订单支付成功信息后,再远程调用库存系统进行库存更新,一旦库存系统异常,很有可能导致库存更新失败而订单支付成功的情况,从而导致数据不一致。针对这种分布式系统的事务管理,通常会在分布式系统之间加入消息服务进行管理。上图中,订单支付成功后,写入消息表;然后定时扫描消息表消息写入到消息队列中,库存系统会立即读取消息队列中的消息进行库存更新,同时添加消息处理状态;接着,库存系统向消息队列中写入库存处理结果,订单系统会立即读取消息队列中的库存处理状态。如果库存服务处理失败,订单服务还会重复扫描并发送消息表中的消息,让库存系统进行最终一致性的库存更新。如果处理成功,订单服务直接删除消息表数据,并写入到历史消息表。
新哥通过以上四种场景,给大家介绍了消息服务,想必大家对为什么要使用消息服务已经有了深入的了解。那下面就请各位跟着新哥的节奏,继续探讨如何安装RabbitMQ。
02 RabbitMQ安装
在使用RabbitMQ之前必须预先安装配置,参考RabbitMQ官网说明,RabbitMQ支持多平台安装,例如Linux、Windows、MacOS、Docker等。不同架构的芯片对应的RabbitMQ安装包是有区别的。目前市场上主流的芯片架构有:X86架构、ARM架构、RISC-V架构和MIPS架构这四种。
例如,在Linux系统中,如果想查看CentOS版本信息,可以通过以下命令来获取。
这里,我们以CentOS 7.X系统(ARM架构和X86架构)和Windows系统环境为例,介绍RabbitMQ的安装配置过程。
2.1 Erlang语言介绍
Erlang(['ə:læŋ])是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。
最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适合构建分布式、实时软并行计算系统。
Erlang运行时环境是一个虚拟机,有点像Java的虚拟机,这样代码一经编译,同样可以随处运行。
2.2 安装Erlang
RabbitMQ安装包依赖于Erlang语言包的支持,所以需要先安装Erlang语言包,再安装RabbitMQ安装包。
下载Erlang时需要注意版本兼容性问题,参考官方文档。
访问上述链接后结果见下图:

在RabbitMQ发布的所有版本中,其中支持CentOS 7.X的最高一个版本是rabbitmq-server-3.10.0-1.el7.noarch。
2.2.1 ARM架构的CentOS虚拟机中安装Erlang
下载ARM架构版本的Erlang安装包。可以从以下三个地址下载otp_src_23.3.4.11.tar.gz版本的安装包。
https://github.com/erlang/otp/releases
https://www.erlang-solutions.com/downloads
https://erlang.org/download/otp_versions_tree.html
拷贝otp_src_23.3.4.11.tar.gz到/opt目录。
安装依赖环境。安装的过程需要消耗一定的时间需耐心等待安装“完毕”的提示。
解压Erlang安装包。
配置安装目录。
编译、安装Erlang。注意,make命令执行的时间可能比较长,需耐心等待编译完成。
打开/etc/profile配置文件,将编译安装的Erlang加入环境变量。
配置ERLANG_HOME安装路径。
使配置文件生效并使用erl命令查看Erlang的版本信息。
2.2.2 X86架构的CentOS虚拟机中安装Erlang
我们下载erlang-23.3.4.11-1.el7.x86_64.rpm版本的Erlang安装包。Erlang安装包下载地址:https://packagecloud.io/rabbitmq/erlang。

请运行安装脚本,或在安装此软件包之前手动安装仓库。
使用wget命令下载Erlang安装包(下载到/opt目录下)。
安装Erlang。
输入"y",回车继续安装,等待安装完成。
输入"erl"命令,如果显示版本号说明Erlang安装成功。
如果在安装Erlang提示“错误:依赖检测失败”解决方案见下。
(1). 如果在安装Erlang时报如下错误。
(2). 在命令后面添加--nodeps --force
参数。该命令的作用是,不再分析包之间的依赖关系而直接安装。
(3). 手动打的安装依赖环境。
2.2.3 Windows系统安装Erlang
1.下载Erlang
访问Erlang官网(https://www.erlang.org),点击【Get Erlang/OPT 24】按钮,进入到下载页面。

在Erlang下载页面选择【Download Windows installer】-【Download 64-bit Installer】选项,下载64位的Erlang安装包。

2.安装Erlang
双击otp_win64_24.3.3.exe安装包,今入选择组件窗口,保持选项默认,直接点击【Next】下一步。

在选择安装位置窗口,自定义Erlang安装配置。例如,安装在D:\ProgramSoftware\erl-24.3.3目录下。

在选择开始菜单文件夹窗口,保持默认,点击【Install】按钮进行安装。

等待Erlang的安装完成,整个安装过程可能需要持续三分钟左右。

安装完成后,点击【Close】按钮,关闭窗口。至此,Erlang语言包的安装完成。

3.配置Erlang
在【高级系统设置】-【环境变量】-【系统变量】选项下,创建ERLANG_HOME变量名,并对此变量名指定Erlang的安装路径作为变量值(注意:在安装Erlang语言包时,会在系统变量下会自动增加一个变量名为ERLANG_HOME的变量配置,它的配置路径是Erlang选择安装的具体路径,无须手动修改。如果此变量已自动生成,无需重复配置)。

双击【系统变量】-【Path】选项,在Path变量中添加Erlang安装目录下的bin配置。
4.检测Erlang
在开始菜单找到【Erlang】选项,点击启动Erlang;如果显示如下界面,则表示Erlang安装配置成功。

或者在【命令提示符】窗口,输入erl
命令,查看Erlang版本号;再输入halt().
退出erl命令操作。

03 安装Socat
ARM架构的CentOS虚拟机中在安装Erlang时,默认已经安装了Socat,因此无需重复安装Socat。而X86架构的CentOS虚拟机中在安装Erlang时,默认没有安装Socat,因此需要手动安装Socat。
3.1 Socat简介
Socat是Linux下的一个多功能的网络工具,名字来由是“Socket CAT”。其功能与有瑞士军刀之称的Netcat类似,可以看做是Netcat的加强版。
Socat的主要特点就是在两个数据流之间建立通道,且支持众多协议和链接方式。如IP、TCP、UDP、IPv6、PIPE、EXEC、System、Open、Proxy、Openssl、Socket等。Socat的官方网站:http://www.dest-unreach.org/socat。
3.2 Socat安装
通过以下地址可以下载Socat安装包:http://repo.iotti.biz/CentOS/7/x86_64。
拷贝socat-1.7.3.2-5.el7.lux.x86_64.rpm到/opt目录。
安装Socat。
查看Socat的版本信息。
04 安装RabbitMQ
4.1 ARM架构的CentOS虚拟机中安装RabbitMQ
下载ARM架构版本的RabbitMQ安装包。下载地址见下。我们选择rabbitmq-server-generic-unix-3.10.0.tar.xz版本的RabbitMQ进行下载。
拷贝rabbitmq-server-generic-unix-3.10.0.tar.xz到/opt目录。
解压RabbitMQ安装包。
打开/etc/profile配置文件,配置RabbitMQ环境变量。
将RabbitMQ安装路径加入环境变量。
使配置文件生效并使用erl命令查看Erlang的版本信息。
启动RabbitMQ管理插件。为了更加方便地管理RabbitMQ,需要启动RabbitMQ的管理插件。
4.2 X86架构的CentOS虚拟机中安装RabbitMQ
下载rabbitmq-server-3.10.0-1.el7.noarch.rpm版本的RabbitMQ安装包。RabbitMQ安装包下载地址:https://packagecloud.io/rabbitmq/rabbitmq-server。

请运行安装脚本,或在安装此软件包之前手动安装仓库。
使用wget命令下载RabbitMQ安装包(下载到/opt目录下)。
安装RabbitMQ。
输入"y",回车继续安装,等待安装完成。
启动RabbitMQ管理插件。为了更加方便地管理RabbitMQ,需要启动RabbitMQ的管理插件。
4.3 Windows系统安装RabbitMQ
4.3.1 下载RabbitMQ
访问RabbitMQ官网(http://rabbitmq.com),点击【Get Started】选项。

选择【Download + Installation】选项,进入RabbitMQ下载页面。

在该页面中可以选择第一个推荐(recommended)的rabbitmq-sever-3.9.14.exe(3.9.14版本是在编写此教程时最新的稳定版本)进行下载。

找到直接下载(Direct Downloads)选项,然后点击rabbitmq-sever-3.9.14.exe进行下载。

4.3.2 安装RabbitMQ
双击rabbitmq-server-3.9.14.exe安装包,打开选择组件窗口,保持选项默认,直接点击【Next】下一步。

在选择安装位置窗口,自定义RabbitMQ安装配置。例如,安装在D:\ProgramSoftware\RabbitMQ Server目录下。然后点击【Install】进行安装。

等待RabbitMQ的安装完成,整个安装过程可能需要持续三分钟左右。

安装完成后,点击【Next】按钮进入下一步操作。

完成RabbitMQ安装后,点击【Finish】按钮,完成操作。

4.3.3 配置RabbitMQ
在【高级系统设置】-【环境变量】-【系统变量】选项下,创建RABBITQM_SERVER变量名,并对此变量名指定RabbitMQ的安装路径作为变量值。

双击【系统变量】-【Path】选项,在Path变量中添加RabbitMQ安装目录下的sbin配置。
4.3.4 启动RabbitMQ管理插件
为了更加方便地管理RabbitMQ,需要启动RabbitMQ的管理插件。
我们将目录切换到RabbitMQ中的sbin目录下。
也可点击开始菜单中的【RabbitMQ Command Prompt (sbin dir)】菜单选项,直接切换到sbin目录下。
执行以下命令,启动RabbitMQ管理插件。
03 操作RabbitMQ
3.1 RabbitMQ常用
RabbitMQ服务操作常用的命令见下。
查看RabbitMQ的进程信息。
3.2 RabbitMQ可视化效果展示
在RabbitMQ安装的宿主机上通过浏览器访问http://localhost:15672地址,查看RabbitMQ的相关信息。
首次登录RabitMQ可视化管理页面时需要进行用户登录,RabbitMQ安装过程中默认提供了用户名和密码均为guest的用户,可以使用该账户进行登录。登录成功后会进入RabbitMQ可视化管理页面的首页。
如果使用其他客户端主机访问RabbitMQ可视化管理页面,将提示“User can only log in via localhost”错误,是因为默认用户只能通过本地主机登录,默认用户不允许远程连接。可以使用自定创建的RabbitMQ账户进行远程登录。
3.3 创建RabbitMW账户
添加admin用户并设置密码。
添加admin用户为administrator角色(设置为管理员权限)。
设置admin用户的权限,将admin设置为远端登录。
查看用户权限。
查看vhost(/)允许哪些用户访问。
查看用户列表。
修改用户密码。
04 总结回顾
关于如何在ARM架构、X86架构和Window系统下如何安装RabbitMQ新哥就给大家介绍完了,各位小伙伴可以根据自己的实际开发场景参考安装。然后我们又给大家介绍了RabbitMQ的基本操作,主要包括RabbitMQ的基本常用命令、RabbitMQ可视化效果展示、以及如何通过命令来创建RabbitMQ账户等内容。
今天新哥就给大家介绍到这里,现在你学会了吗?关注「袁庭新」,干货天天都不断!
