linux安装rabbitMQ
docker安装rabbitmq: Docker系列之RabbitMQ安装部署教程 - 腾讯云开发者社区-腾讯云 (tencent.com) admin admin
安装延迟插件: rabbitmq版本3.8及以下 docker pull rabbitmq:3.8.11-management
1. 首先我们将刚下载下来的rabbitmq_delayed_message_exchange-3.8.0.ez文件上传到RabbitMQ所在服务器,下载地址:https://www.rabbitmq.com/community-plugins.html
2. 切换到插件所在目录,执行 docker cp rabbitmq_delayed_message_exchange-3.8.0.ez rabbitmq:/plugins 命令,将刚插件拷贝到容器内plugins目录下
3. 执行 docker exec -it rabbitmq /bin/bash 命令进入到容器内部,并 cd plugins 进入plugins目录
4. 执行 ls -l|grep delay 命令查看插件是否copy成功
5. 在容器内plugins目录下,执行 rabbitmq-plugins enable rabbitmq_delayed_message_exchange 命令启用插件
6. exit命令退出RabbitMQ容器内部,然后执行 docker restart rabbitmq 命令重启RabbitMQ容器
1.下载Erlang的rpm包
RabbitMQ是Erlang语言编写,所以Erang环境必须要有,注:Erlang环境一定要与RabbitMQ版本匹配:
https://www.rabbitmq.com/which-erlang.html
Erlang下载地址:Releases · rabbitmq/erlang-rpm (github.com)(根据自身需求及匹配关系,下载对应rpm包)
2.下载socat的rpm包
rabbitmq安装依赖于socat,所以需要下载socat。
socat下载地址:Index of /CentOS/7/x86_64 (iotti.biz)
3.下载RabbitMQ的rpm包
RabbitMQ下载地址:Installing on RPM-based Linux (RedHat Enterprise Linux, CentOS, Fedora, openSUSE) — RabbitMQ(根据自身需求及匹配关系,下载对应rpm包)
1.安装Erlang、Socat、RabbitMQ
①rpm -ivh erlang-21.3.8.9-1.el7.x86_64.rpm
②rpm -ivh socat-1.7.3.2-1.el6.lux.x86_64.rpm
在安装rabbitmq之前需要先安装socat,否则,报错。
可以采用yum安装方式:yum install socat,我们这里采用rpm安装方式
③rpm -ivh rabbitmq-server-3.8.1-1.el7.noarch.rpm
安装目录 /usr/lib/rabbitmq/lib/rabbitmq_server-3.10.0
2.启用管理插件
rabbitmq-plugins enable rabbitmq_management
3.启动RabbitMQ
systemctl start rabbitmq-server.service
systemctl status rabbitmq-server.service
systemctl restart rabbitmq-server.service
systemctl stop rabbitmq-server.service
4.查看进程
ps -ef | grep rabbitmq
测试
- 关闭防火墙:systemctl stop firewalld.service
- 在web浏览器中输入地址:http://虚拟机ip:15672/
输入默认账号密码: guest : guest,guest用户默认不允许远程连接
增加自定义账号
l 添加管理员账号密码:rabbitmqctl add_user admin admin
l 分配账号角色:rabbitmqctl set_user_tags admin administrator
l 修改密码:rabbitmqctl change_password admin 123456
l 查看用户列表:rabbitmqctl list_users
使用新账号登录,成功界面
管理界面标签页介绍
l overview:概览
l connections:无论生产者还是消费者,都需要与RabbitMQ建立连接后才可以完成消息的生产和消费,在这里可以查看连接情况
l channels:通道,建立连接后,会形成通道,消息的投递获取依赖通道。
l Exchanges:交换机,用来实现消息的路由
l Queues:队列,即消息队列,消息存放在队列中,等待消费,消费后被移除队列。
端口:
l 5672:rabbitMq的编程语言客户端连接端口
l 15672:rabbitMq管理界面端口
l 25672:rabbitMq集群的端口
卸载
l rpm -qa | grep rabbitmq
l rpm -e rabbitmq-server
RabbitMQ集群搭建
主要参考官方文档:https://www.rabbitmq.com/clustering.html
首先确保RabbitMQ运行没有问题
start rabbitmq-server.service
status rabbitmq-server.service
停止rabbitmq服务 systemctl stop rabbitmq-server.service
启动三个节点做集群演示:
由于web管理插件端口占用,所以还要指定其web插件占用的端口号。
RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" rabbitmq-server -detached
RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" rabbitmq-server -detached
RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit3 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" rabbitmq-server -detached
启动三个节点后,分别访问三个节点,后台管理页面,看看是否OK.
停止服务命令:
rabbitmqctl -n rabbit1 stop rabbitmqctl -n rabbit2 stop rabbitmqctl -n rabbit3 stop |
rabbit1操作作为主节点:
rabbitmqctl -n rabbit1 stop_app rabbitmqctl -n rabbit1 reset rabbitmqctl -n rabbit1 start_app |
rabbit2操作为从节点:
rabbitmqctl -n rabbit2 stop_app rabbitmqctl -n rabbit2 reset rabbitmqctl -n rabbit2 join_cluster rabbit1 rabbitmqctl -n rabbit2 start_app |
rabbit3操作为从节点:
rabbitmqctl -n rabbit3 stop_app rabbitmqctl -n rabbit3 reset rabbitmqctl -n rabbit3 join_cluster rabbit1 rabbitmqctl -n rabbit3 start_app
|
查看集群状态:
rabbitmqctl -n rabbit1 cluster_status
web监控:198.168.6.100:15672 本地登录
集群管理:
rabbitmqctl join_cluster {cluster_node} [–ram]
将节点加入指定集群中。在这个命令执行前需要停止RabbitMQ应用并重置节点。
rabbitmqctl cluster_status
显示集群的状态。
rabbitmqctl change_cluster_node_type {disc|ram}
修改集群节点的类型。在这个命令执行前需要停止RabbitMQ应用。
rabbitmqctl forget_cluster_node [–offline]
将节点从集群中删除,允许离线执行。
rabbitmqctl update_cluster_nodes {clusternode}
在集群中的节点应用启动前咨询clusternode节点的最新信息,并更新相应的集群信息。这个和join_cluster不同,它不加入集群。考虑这样一种情况,节点A和节点B都在集群中,当节点A离线了,节点C又和节点B组成了一个集群,然后节点B又离开了集群,当A醒来的时候,它会尝试联系节点B,但是这样会失败,因为节点B已经不在集群中了。
rabbitmqctl cancel_sync_queue [-p vhost] {queue}
取消队列queue同步镜像的操作。
rabbitmqctl set_cluster_name {name}
设置集群名称。集群名称在客户端连接时会通报给客户端。Federation和Shovel插件也会有用到集群名称的地方。集群名称默认是集群中第一个节点的名称,通过这个命令可以重新设置。
RabbitMQ镜像集群配置
上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。虽然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。
镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。
设置的镜像队列可以通过开启的网页的管理端Admin->Policies,也可以通过命令

Name:策略名称
Pattern:匹配的规则,如果是匹配所有的队列,是^
Definition:使用ha-mode模式中的all,也就是同步所有匹配的队列。问号链接帮助文档
负载均衡-HAProxy
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用。HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。
安装HAProxy
//下载依赖包 yum install gcc vim wget //下载haproxy //上传haproxy源码包; -C解压到指定的目录 tar -zxvf haproxy-1.6.5.tar.gz -C /usr/local //进入目录、进行编译、安装 cd /usr/local/haproxy-1.6.5 // make 表示编译;TARGET=linux31 表示CentOS7系统;PREFIX=/usr/local/haproxy指定安装路径 // TARGET=linux310,内核版本,使用uname -r查看内核,如:3.10.0-514.el7,此时该参数就为linux310; make TARGET=linux310 PREFIX=/usr/local/haproxy make install PREFIX=/usr/local/haproxy mkdir /etc/haproxy //添加用户组:-r 创建一个系统组;-g 组ID groupadd -r -g 149 haproxy //添加用户:-g 新账户组的名称;-r 创建一个系统用户;-s 新用户的登录shell; -u 新账户的用户ID useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy //创建haproxy配置文件 vim /etc/haproxy/haproxy.cfg |
配置HAProxy
配置文件路径:/etc/haproxy/haproxy.cfg
#全局配置 global #日志输出配置,所有日志都记录在本机,通过local0输出 log 127.0.0.1 local0 info #最大连接数 maxconn 5120 #改变当前的工作目录 chroot /usr/local/haproxy #以指定的UID运行haproxy进程 uid 99 #以指定的GID运行haproxy进程 gid 99 #以守护进程方式运行haproxy daemon quiet nbproc 20 #当前进程PID文件 pidfile /var/run/haproxy.pid #默认配置 defaults #应用全局的日志配置 log global #默认的模式mode{tcp|http|health} mode tcp #日志类别 option tcplog #不记录检查检查日志信息 option dontlognull #3次失败则认为服务不可用 retries 3 option redispatch #每个进程可用的最大连接数 maxconn 2000 #连接超时 contimeout 5s #客户端超时 clitimeout 60s #服务端超时 srvtimeout 15s #绑定配置 listen rabbitmq_cluster bind *:5677 #配置TCP模式 mode tcp #balance url_param userid #balance url_param session_id check_post 64 #balance hdr(User-Agent) #balance hdr(host) #balance hdr(Host) use_domain_only #balance rdp-cookie #balance leastconn #balance source //ip #简单的轮询 balance roundrobin #server rabbit1 定义服务内部标识, #127.0.0.1:5672 服务连接IP和端口, #check inter 5000 定义每隔多少毫秒检查服务是否可用, #rise 2 服务故障后需要多少次检查检查才能被再次确认可用, #fall 2 经历多次失败的检查检查后,haproxy才会停止使用此服务 #weight 1 定义服务权重 server rabbit1 192.168.6.100:5672 check inter 5000 rise 2 fall 2 weight 1 server rabbit2 192.168.6.100:5673 check inter 5000 rise 2 fall 2 weight 1 server rabbit3 192.168.6.100:5674 check inter 5000 rise 2 fall 2 weight 1 #haproxy监控页面地址 listen stats bind 192.168.6.100:8100 mode http option httplog stats enable stats uri /rabbitmq-stats stats refresh 5s
启动HAproxy负载
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg |
//查看haproxy进程状态
ps -ef | grep haproxy |
访问如下地址对mq节点进行监控 http://192.168.6.100:8100/rabbitmq-stats
springboot yml文件中访问mq集群地址:
spring:
rabbitmq:
host: 192.168.6.100
port: 5677
username: admin
password: 123456
virtual-host: /
#addresses: 192.168.6.100:5672,192.168.6.100:5673,192.168.6.100:5674
RabbitMQ延迟消息基于插件x-delayed-message
rabbitmq版本3.7及以下
下载插件
地址:Releases · rabbitmq/rabbitmq-delayed-message-exchange · GitHub
下载的插件放到rabbitmq安装目录的plugins里面,重启rabbitmq就可以了。
下载 .ez 文件
/usr/lib/rabbitmq/lib/rabbitmq_server-3.10.0/plugins
启用插件,切换至sbin目录下,执行以下命令
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
systemctl restart rabbitmq-server.service
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)