前提

工作接近3年,一直有使用RabbitMQ作为服务间解耦的中间件,但是一直没有做一系列学习和总结,这里决心做一个系列总结一下RabbitMQ的运维、使用以及生产中遇到的问题等,以便日后直接拿起来使用。整个系列使用的Linux系统为CentOS 7的最新版本CentOS-7-x86_64-Minimal-1804。而RabbitMQ Server使用当前最新的版本3.7.9.RELEASE。

RabbitMQ Server的安装

RabbitMQ Server使用Erlang语言编写,Erlang语言的并发编程支持比较优异,所以我们要先安装Erlang(类似于我们需要运行Java程序,要先安装JVM):

# 添加erlang的yum源
rpm --import https://packages.erlang-solutions.com/rpm/erlang_solutions.asc

或者直接在目录/etc/yum.repos.d/手动添加一个新的.repo文件(文件名可以随意如erlang.repos),内容是:

[erlang-solutions]
name=CentOS $releasever - $basearch - Erlang Solutions
baseurl=https://packages.erlang-solutions.com/rpm/centos/$releasever/$basearch
gpgcheck=1
gpgkey=https://packages.erlang-solutions.com/rpm/erlang_solutions.asc
enabled=1

然后执行命令安装Erlang:

# 安装erlang
sudo yum install erlang

安装完成之后Erlang会自行后台运行,输入erl就能进入Erlang的命令行工具说明安装成功:

安装Erlang过程中如果提示:

error: Failed dependencies:
epel-release is needed by erlang-solutions-1.0-1.noarch

说明缺少epel-release依赖,通过sudo yum install epel-release安装epel-release即可。

接着可以安装RabbitMQ Server,先下载其RPM安装包:

## 下载
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.9/rabbitmq-server-3.7.9-1.el7.noarch.rpm

接着在下载文件目录中执行安装命令:

# 在Yum仓库可以使用之前,需要让RPM工具信任RabbitMQ的rpm包的签名,需要执行下面的命令
rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
# Yum安装
yum install rabbitmq-server-3.7.9-1.el7.noarch.rpm

安装完成后,RabbitMQ Server会自行在后台运行,这个时候可以执行命令rabbitmqctl status验证其状态:

r-s-2.png

RabbitMQ Server启动于停止

RabbitMQ Server已经成功安装为CentOS 7的服务,它的启动和停止可以直接使用systemctl命令:

# 启动
systemctl start rabbitmq-server

# 停止
systemctl stop rabbitmq-server

# 重启
systemctl restart rabbitmq-server

# 前台启动,shell关闭会shutdown
rabbitmq-server start

# 后台启动
rabbitmq-server -detached

当然,也可以使用RabbitMQ Serverrabbitmqctl命令(格式是:rabbitmqctl [-n <node>] [-l] [-q] <command> [<command options>]):

# 停止Erlang上的node节点
rabbitmqctl stop_app
# 启动
rabbitmqctl start_app

安装Web管理插件

RabbitMQ Server管理插件的命令是rabbitmq-plugins [-n <node>] [-l] [-q] <command> [<command options>],command部分目前只有下面几个:

Commands:
disable <plugin>|--all [--offline] [--online]
enable <plugin>|--all [--offline] [--online]
help <command>
list [pattern] [--verbose] [--minimal] [--enabled] [--implicitly-enabled]
set [<plugin>] [--offline] [--online]

我们可以通过命令rabbitmq-plugins list先展示所有可用的插件:

其中的rabbitmq_management就是我们需要安装的Web管理界面,执行下面的命令启用Web管理插件:

rabbitmq-plugins enable rabbitmq_management

实际上是启用了rabbitmq_managementrabbitmq_management_agentrabbitmq_web_dispatch三个插件。插件启动完毕后,我们需要添加一个新的用户或者修改原有的guest用户的权限,因为guest用户只允许使用localhost访问Web管理界面。

用户管理

用户账号密码管理常用命令如下:

# 新增一个用户
rabbitmqctl add_user ${username} ${password}
# 修改用户密码
rabbitmqctl change_password ${old_password} ${new_password}
# 验证用户密码
rabbitmqctl authenticate_user ${username} ${password}
# 删除用户
rabbitmqctl delete_user ${username}
# 展示用户列表
rabbitmqctl list_users

例如创建一个用户名和密码都是root的账号:rabbitmqctl add_user root root

用户角色(Tag)管理常用命令格式是rabbitmqctl set_user_tags ${username} ${tag...},可选的角色类型有:

Tag 描述
none 无角色,新创建的用户就是这类型的Tag
management 具备Web管理界面访问权限
policymaker 具备management所有权限,可以管理policy和parameter
monitoring 具备policymaker所有权限,可以监控连接、channel、节点信息等
administrator 管理员权限

例如为root账号赋予管理员权限:rabbitmqctl set_user_tags root administrator

用户权限(Permission)管理常用命令如下:

# 添加权限
# vhost:虚拟host,默认为"/"
# username:用户名
# conf:配置权限,可以用正则表达式
# write:写权限,可以用正则表达式
# read:读权限,可以用正则表达式
rabbitmqctl set_permissions [-p vhost] ${username} ${conf} ${write} ${read}

# 查看虚拟host权限
rabbitmqctl list_permissions [-p vhost]

# 查看用户权限
rabbitmqctl list_user_permissions ${username}

# 清除用户权限
rabbitmqctl clear_permissions [-p vhost] ${username}

例如为root账号赋予虚拟Host为”/“下的所有的配置、读、写权限:rabbitmqctl set_permissions root ".*" ".*" ".*"

我们可以使用root账号登录Web管理界面:

关于RabbitMQ Server多租户(虚拟Host)、角色、权限管理的其他细节暂时不展开,因为可能需要不少的篇幅才能说明。

小结

关于RabbitMQ Server的命令和运维方面的东西暂时不大量展开,按照上面几节搭建好的RabbitMQ服务对于测试或者开发调试已经基本可用,接着就可以通过官方提供的例子进行学习。

参考资料:

参考资料的链接在将来不确定是否有变,主要是参考了erlangrabbitmq的官方文档的安装提示。

(本文完 c-1-d e-20181118)