消息中间件 RabbitMQ 介绍与安装教程(使用CentOS环境)
一、基本概念介绍
1. 什么是消息队列?
- 消息队列(Message Queue)是一种进程间或者线程间的异步通信方式。
- 使用消息队列,消息生产者在产生消息后,会将消息保存在消息队列中,直到消息消费者来取走它,即消息的发送者和接收者不需要同时与消息队列交互。
- 使用消息队列可以有效实现服务的解耦,并提高系统的可靠性以及可扩展性。
- 目前,开源的消息队列服务非常多,如 Apache ActiveMQ、RabbitMQ 等,这些产品也就是常说的消息中间件。
2. 什么是 AMQP?
- AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个线路层的协议规范,而不是 APl 规范(例如 JMS)。
- 由于 AMQP 是一个线路层协议规范,因此它天然就是跨平台的,就像 SMTP、HTTP 等协议一样,只要开发者按照规范的格式发送数据,任何平台都可以通过 AMQP 进行消息交互。
- 像目前流行的 StormMQ、RabbitMQ 等都实现了 AMQP。
3. 什么是 RabbitMQ?
- RabbitMQ 是一个实现了 AMQP 的开源消息中间件,使用高性能的 Erlang 编写。
- RabbitMQ 具有可靠性、支持多种协议、高可用、支持消息集群以及多语言客户端等特点,在分布式系统中存储转发消息,具有不错的性能表现。
二、安装 RabbitMQ
1. 安装 Erlang 环境
(1)由于 RabbitMQ 使用 Erlang 编写,因此需要先安装 Erlang 环境,首先执行如下命令下载安装包:
wget http://erlang.org/download/otp_src_21.0.tar.gz
(2)接着执行如下命令解压并进入解压后的文件夹:
tar -zxvf otp_src_21.0.tar.gz
cd otp_src_21.0
(3)然后依次执行如下命令进行编译安装:
注意:如果执行第一步出现“./otp_build:行319: autoconf: 未找到命令”错误,需要先执行如下命令安装 autoconf :
yum install -y autoconf
./otp_build autoconf
./configure
make
make install
(4)安装后执行 erl 命令进行检查,如果出现如下信息则说明安装成功。
2. 安装 RabbitMQ
(1)由于 yum 仓库中默认的 Erlang 版本较低,因此首先需要将最新的 Erlang 包添加到 yum 源中,执行如下命令开始编辑:
vim /etc/yum.repos.d/rabbitmq-erlang.repo
(2)在文件里添加如下内容,然后保存退出:
[rabbitmq-erlang]
name=rabbitmqerlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/21/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
(3)添加成功后,执行如下命令清除原有缓存并创建新缓存:
yum clean all
yum makecache
yum update
(4)执行 yum list | grep erlang.x86_64 命令查看下 erlang 的安装包。可以看到里面有一个 erlang.x86_64,版本为:21.xxxxxx,而且所属于 rabbitmq-erlang,这样就可以了。
(5)准备工作完成后就可以开始安装 RabbitMQ 了,首先执行如下命令下载文件:
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.7/rabbitmq-server-3.7.7-1.el7.noarch.rpm
(6)下载后执行如下命令开始安装:
yum install rabbitmq-server-3.7.7-1.el7.noarch.rpm
(7)安装过程中,若提示缺少 socat 依赖,则执行如下命令安装 socat 依赖即可:
yum install socat
(8)安装完毕后,我们可以依次执行如下命令启动 RabbitMQ 服务、开启 web 插件、再重启服务:
service rabbitmq-server start
rabbitmq-plugins enable rabbitmq_management
service rabbitmq-server restart
(9)执行如下命令可以查看状态,其中红框标注的是 log 文件的位置,如启动不成功可以查看日志定位问题:
service rabbitmq-server status
3. 添加用户
(1)接下来我们添加一个用户名为 suohe,密码为 123 的用户:
RabbitMQ 启动成功后,默认有一个 guest 用户,但是该用户只能在本地登录,无法远程登录。因此我通常需要添加一个新用户,同时其拥有管理员身份,而且能远程登录。
rabbitmqctl add_user suohe 123
(2)然后将这个用户设置为管理员角色,并且远程登录:
rabbitmqctl set_user_tags suohe administrator
rabbitmqctl set_permissions -p / suohe ".*" ".*" ".*"
4. 开放防火墙端口
如果需要远程访问,我们还需执行如下命令开放 15672 和 5672 这两个端口。
不知为何,我直接关闭防火墙反而无法远程访问 Web 管理页面,必须开启防火墙并开放端口才行。
firewall-cmd --permanent --add-port=15672/tcp``firewall-cmd --permanent --add-port=5672/tcp``firewall-cmd --reload
5. 访问测试
(1)使用浏览器访问 http://IP:15672,如果看到如下页面则说明 RabbitMQ 已经启动成功。
(2)使用我们前面创建的 suohe 用户登录,登录后的界面如下: