安装RabbitMQ-Linux篇

612 阅读3分钟

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