PS:RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,用于在分布式系统中存储转发消息,有良好的易用性、扩展性和高可用性。本文介绍如何通过服务器实例部署RabbitMQ
服务器环境
centos7.4
1、安装依赖环境erlang
RabbitMQ依赖于erlang,通过软件包管理器安装
github地址:github.com/rabbitmq/er…
#添加erlang solutions源
wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
#安装erlang
yum install -y erlang
#验证是否安装成功
erl -version
2、安装依赖环境socat
yum -y install socat
3、安装RabbitMQ
github地址:github.com/rabbitmq/ra…
#下载rabbitmq RPM
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.16/rabbitmq-server-3.8.16-1.el8.noarch.rpm
rpm -ivh rabbitmq-server-3.8.17.rc.1-1.el7.noarch.rpm
4、安装web界面插件
rabbitmq-plugins enable rabbitmq_management
5、启动RabbitMQ
systemctl start rabbitmq-server
6、创建RabbitMQ用户
#添加新用户,用户名为"root",密码为"root"
rabbitmqctl add_user root root
#设置用户为管理员角色
rabbitmqctl set_user_tags root administrator
#授权远程访问
rabbitmqctl set_permissions -p / root "." "." ".*"
7、浏览器访问 http://127.0.0.1:15672
常用服务命令
#设置开机启动:
systemctl enable rabbitmq-server
#启动服务
systemctl start rabbitmq-server
#重启服务
systemctl restart rabbitmq-server
#停止服务
systemctl stop rabbitmq-server
#服务状态
systemctl status rabbitmq-server
用户角色说明
默认情况下,访问RabbitMQ服务的用户名和密码都是"guest",这个账户有限制,
默认只能通过本地网络(如localhost)访问,远程网络访问受限,
使用默认的用户 guest / guest (此也为管理员用户)登陆,会发现无法登陆,报错:User can only log in via localhost。
那是因为默认是限制了guest用户只能在本机登陆,也就是只能登陆localhost:15672。所以在实现生产和消费消息之前,需要另外添加一个用户,并设置相应的访问权限
1、 超级管理员(administrator)
可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。
2、 监控者(monitoring)
可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
3、 策略制定者(policymaker)
可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
4、 普通管理者(management)
仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。
5、 其他
无法登陆管理控制台,通常就是普通的生产者和消费者。
常见问题
重启服务器后,RabbitMQ用户丢失问题
在部署配置完成后,重启了一次服务器,服务器启动后重新启动RabbitMQ服务,结果神奇的发现RabbitMQ用户丢失了。
原因如下:
# RabbitMQ数据是根据当前hostname作为node节点作为数据名保存
ls /var/lib/rabbitmq/mnesia/
rabbit@server-7ee22877-6975-45e7-be3e-b59f36ff50db
rabbit@Server-7ee22877-6975-45e7-be3e-b59f36ff50db
rabbit@server-7ee22877-6975-45e7-be3e-b59f36ff50db-feature_flags
rabbit@Server-7ee22877-6975-45e7-be3e-b59f36ff50db-feature_flags
rabbit@server-7ee22877-6975-45e7-be3e-b59f36ff50db.pid
rabbit@server-7ee22877-6975-45e7-be3e-b59f36ff50db-plugins-expand
rabbit@Server-7ee22877-6975-45e7-be3e-b59f36ff50db-plugins-expand
重启服务器之前我修改了hostname,所以重启之后,RabbitMQ服务使用新的hostname来保存数据。
可以通过添加RabbitMQ固定节点名字,保证数据文件不变。
echo 'NODENAME=rabbit@rabitmq-info' | sudo tee -a /etc/rabbitmq/rabbitmq-env.conf
echo '127.0.0.1 rabitmq-info' | sudo tee -a /etc/hosts