前提
工作接近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:
代码语言:javascript复制# 安装erlang
sudo yum install erlang
安装完成之后Erlang会自行后台运行,输入erl就能进入Erlang的命令行工具说明安装成功:
安装Erlang过程中如果提示:
代码语言:javascript复制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
接着在下载文件目录中执行安装命令:
代码语言:javascript复制# 在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
验证其状态:
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 Server
的rabbitmqctl
命令(格式是: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_management
、rabbitmq_management_agent
、rabbitmq_web_dispatch
三个插件。插件启动完毕后,我们需要添加一个新的用户或者修改原有的guest用户的权限,因为guest用户只允许使用localhost访问Web管理界面。
用户管理
用户账号密码管理常用命令如下:
代码语言:javascript复制# 新增一个用户
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服务对于测试或者开发调试已经基本可用,接着就可以通过官方提供的例子进行学习。
参考资料:
- https://www.erlang-solutions.com/resources/download.html
- http://www.rabbitmq.com/install-rpm.html
参考资料的链接在将来不确定是否有变,主要是参考了erlang
和rabbitmq
的官方文档的安装提示。
(本文完 c-1-d e-20181118)
本文是Throwable的原创文章,转载请提前告知作者并且标明出处。 博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议 本文永久链接是:https://cloud.tencent.com/developer/article/1650047