yum仓库安装rabbitmq
官方文档地址:https://www.rabbitmq.com/docs/4.0/install-rpm
右上角可以选择文档版本,注意适用的操作系统版本。有两种安装方式,一种是下载rpm文件进行安装,另一种是配置yum源进行安装,这里采用第二种安装方式。
0、导入key
## primary RabbitMQ signing key
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc'
## modern Erlang repository
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key'
## RabbitMQ server repository
rpm --import 'https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key'
1、配置yum仓库
# vim /etc/yum.repos.d/rabbitmq.repo
# In /etc/yum.repos.d/rabbitmq.repo
##
## Zero dependency Erlang RPM
##
[modern-erlang]
name=modern-erlang-el9
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/$basearch
https://yum2.rabbitmq.com/erlang/el/9/$basearch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md
[modern-erlang-noarch]
name=modern-erlang-el9-noarch
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/noarch
https://yum2.rabbitmq.com/erlang/el/9/noarch
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md
[modern-erlang-source]
name=modern-erlang-el9-source
# Use a set of mirrors maintained by the RabbitMQ core team.
# The mirrors have significantly higher bandwidth quotas.
baseurl=https://yum1.rabbitmq.com/erlang/el/9/SRPMS
https://yum2.rabbitmq.com/erlang/el/9/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
##
## RabbitMQ Server
##
[rabbitmq-el9]
name=rabbitmq-el9
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/$basearch
https://yum1.rabbitmq.com/rabbitmq/el/9/$basearch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md
[rabbitmq-el9-noarch]
name=rabbitmq-el9-noarch
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/noarch
https://yum1.rabbitmq.com/rabbitmq/el/9/noarch
repo_gpgcheck=1
enabled=1
# Cloudsmith's repository key and RabbitMQ package signing key
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
https://github.com/rabbitmq/signing-keys/releases/download/3.0/rabbitmq-release-signing-key.asc
gpgcheck=1
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md
[rabbitmq-el9-source]
name=rabbitmq-el9-source
baseurl=https://yum2.rabbitmq.com/rabbitmq/el/9/SRPMS
https://yum1.rabbitmq.com/rabbitmq/el/9/SRPMS
repo_gpgcheck=1
enabled=1
gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key
gpgcheck=0
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
pkg_gpgcheck=1
autorefresh=1
type=rpm-md
2、刷新yum缓存并执行安装
yum makecache
yum install -y socat logrotate
yum install -y erlang rabbitmq-server --nogpgcheck
3、启动rabbitmq
启动服务
systemctl start rabbitmq-server
开机自启
systemctl enable rabbitmq-server
停止服务
systemctl stop rabbitmq-server
查看服务状态
systemctl status rabbitmq-server
yum clean metadata
yum clean dbcache
yum clean all
4、配置 Web 界面管理
RabbitMQ 提供给了我们一个 Web 形式的管理界面,默认是没有的,需要进行安装。
1、安装 Web 管理插件,然后重启服务
安装命令 (启用插件)
rabbitmq-plugins enable rabbitmq_management
重启服务
systemctl restart rabbitmq-server
查看插件列表
rabbitmq-plugins list
默认插件安装路径:/usr/lib/rabbitmq/lib/rabbitmq_server-4.1.0/plugins
2、添加远程登录的账户
RabbitMQ 有一个默认账号和密码都是 guest ,但是只能在 localhost 下访问
新增用户 用户名和密码都是 admin
rabbitmqctl add_user admin admin
删除默认的guest用户
rabbitmqctl delete_user guest
查看用户
rabbitmqctl list_users
查看权限
rabbitmqctl list_permissions
3、为远程登录的账户添加权限
administrator(超级管理员):登录控制台、查看所有信息、操作用户、操作策略
monitoring(监控者): 登录控制台、查看所有信息
policymaker(策略制定者): 登录控制台、指定策略
managment(普通管理员): 登录控制台
设置用户分配操作权限,admin 用户的权限为 administrator
rabbitmqctl set_user_tags admin administrator
补充: RabbitMQ的角色分类:
Administrator:超级管理员,(学习经常使用)
最高权限
可以创建和删除 virtual hosts
可以查看,创建、删除users
查看、创建permissions
关闭所有用户的connections
Monitoring:相当于普通管理员
包含management所有权限
罗列出所有的virtual hosts,包括不能登录的virtual hosts
查看其他用户的connections和channels信息
查看节点级别的数据如clustering何memory使用情况
查看所有的virtual hosts的全局统计信息
Policymaker:
包含management所有权限
查看和创建和删除自己的virtual hosts所属的policies和parameters信息
management:
查看自己相关节点信息
列出自己可以通过AMQP登入的虚拟机
查看自己的虚拟机节点 virtual hosts的queues,exchanges和bingdings信息,查看和关闭自己的channels和connections信息
查看有关自己的虚拟机节点 virtual hosts统计信息,包括其他用户在这个节点 virtual hosts中的活动信息
none:不能访问mamanement plugin
4、为用户添加资源权限
因为 admin 已经是超级管理员权限了,所以其实不分配资源权限也可以,会默认去做。
命令格式为: set_permissions [-p ]
这里即为 admin 用户开启 配置文件和读写的权限
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
5、访问 Linux IP:15672
例如http://IP:15672/ ,输入刚才设置好的用户名密码 admin
5、nginx代理访问rabbitmq
官方文档地址:https://www.rabbitmq.com/docs/management#nginx
1、代理业务端口5672
mq和生产者都在内网服务器上;消费者在外网。Nginx 通常处理的是 HTTP 请求,而 RabbitMQ 则基于 AMQP 或其他消息协议工作。需要进行协议的转换和适配。nginx支持stream模块, 使用stream
模块,Nginx不会解析AMQP协议,因此可以完整的转换协议。
检查当前 Nginx 是否已支持 Stream 模块
# nginx -V 2>&1 | grep -o with-stream
输出:
with-stream
with-stream
with-stream
注:输出with-stream代表支持。如果不是需要对nginx进行配置。
nginx部署:nginx.conf
# stream{}模块跟http{}模块平级
stream {
upstream stream_rabbitmq_backend {
server 127.0.0.1:5672;
}
server {
listen 10000;
proxy_pass stream_rabbitmq_backend;
}
}
外网消费者访问地址:http://ip:10000
2、代理web访问端口15672
第一种情况,访问根/
路径
location / {
allow xxx.xxx.xxx.xxx;
deny all;
proxy_pass http://rabbitmq-host:15672;
}
第一种情况,访问二级/rabbitmq
路径
注意:在退出登录的时候会报错,无法访问到/路径
location ~* /rabbitmq/(.*) {
allow xxx.xxx.xxx.xxx;
deny all;
rewrite ^/rabbitmq/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:15672;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
6、安装延迟插件
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange
插件目录:/usr/lib/rabbitmq/lib/rabbitmq_server-4.1.0/plugins
/usr/lib/rabbitmq/lib/rabbitmq_server-4.1.0/plugins/rabbitmq_delayed_message_exchange-4.1.0.ez
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
systemctl restart rabbitmq-server.service
rabbitmq-plugins list
7、rabbitmq重启服务后用户丢失解决办法
查看rabbitmq数据存储路径:/var/lib/rabbitmq/mnesia
, 会发现文件名增加两个,新的数据会采用这两文件夹,由于丢失旧数据也就丢失原来添加的用户
解决办法:添加rabbitmq固定节点名字,保证数据文件不变,从而添加新用户,重启服务也不会丢失用户
# 查看当前RabbitMQ已注册用户
rabbitmqctl list_users
# 查看rabbitmq用户数据(当前hostname作为node节点保存数据)
ll /var/lib/rabbitmq/mnesia/
# 修改主机名为test,并重启rabbitmq服务
hostnamectl set-hostname test
# 出现的问题
主机名已改为test,发现rabbitmq的用户admin丢失了,同时数据存放目录新增了跟test相关的一些文件
ll /var/lib/rabbitmq/mnesia/
启动rabbitmq, 访问页面会出现弹窗,admin用户无法登录,再次查看已注册的用户,发现没有admin了
# 修改rabbitmq-env.conf,添加rabbitmq固定节点名字,保证数据文件不变,主机名设为:info
echo 'NODENAME=rabbit@info' | tee -a /etc/rabbitmq/rabbitmq-env.conf
# 添加hosts
echo '127.0.0.1 info' | tee -a /etc/hosts
# 重启服务
systemctl restart rabbitmq-server
修改hostname测试rabbitmq存储节点是否有新增,测试过程发现文件不会新增,保持不变,用户信息也没丢失
由于修改系统hostname未重启rabbitmq导致的,只有设置节点名字,就不需要怕修改hostname,通常情况下也不会修改过hostname