本文主要记录RabbitMQ的高可用集群搭建。
1.环境准备
liunx centos7,docker-compose,镜像rabbitmq:3.9-management,两个节点5672和5673
2.yaml文件
version: '3.7'
services:
rabbit01:
image: rabbitmq:3.9-management
container_name: rabbit01
hostname: rabbit01
ports:
- "5672:5672"
- "15672:15672"
volumes:
- ./5672:/var/lib/rabbitmq
environment:
#cookie 值必须都一致
RABBITMQ_ERLANG_COOKIE: "rabbitcookie"
networks:
- my-net
rabbit02:
image: rabbitmq:3.9-management
container_name: rabbit02
hostname: rabbit02
ports:
- "5673:5672"
- "15673:15672"
volumes:
- ./5673:/var/lib/rabbitmq
environment:
RABBITMQ_ERLANG_COOKIE: "rabbitcookie"
networks:
- my-net
networks:
my-net:
external: true
3.初始化集群
进入容器内部执行,指定某一台机器为master,master不需要执行该操作
[root@m rabbitmq-cluster]# docker exec -it rabbit01 bash
root@rabbit02:/# rabbitmqctl stop_app
root@rabbit02:/# rabbitmqctl reset
root@rabbit02:/# rabbitmqctl join_cluster --ram rabbit@rabbit01
root@rabbit02:/# rabbitmqctl start_app
也可以使用shell脚本
count=0
tempname="rabbit01"
for name in `docker ps | grep "rabbit" | awk '{ print $NF }'`
do
echo $name,$count,$tempname
docker exec -it $name rabbitmqctl stop_app
sleep 0.3
docker exec -it $name rabbitmqctl reset
sleep 0.3
if [ $count -gt 0 ]
then
docker exec -it $name rabbitmqctl join_cluster --ram rabbit@$tempname
sleep 0.3
else
tempname=$name
echo '获取master节点:', $tempname
fi
docker exec -it $name rabbitmqctl start_app
let count+=1
done
4.web管理控制台
访问15672或者15673均为以下界面,则搭建成功
5.java中集群配置
spring:
rabbitmq:
#仅配置不同
addresses: 192.168.0.221:5672,192.168.0.221:5673
username: guest
password: guest
virtual-host: /
listener:
simple:
#手动确认 当有自动确认机制 又手动ACK会报406错误
acknowledge-mode: manual
以上就是本章的全部内容了。
上一篇:RabbitMQ第二话 – Springboot基于四种Exchange(Direct、Fanout、Topic、Heders、延时队列)的实现和多虚拟主机下的生产消费者实现
下一篇:RocketMQ第一话 – Docker安装以及Springboot集成RocketMQ
熟读唐诗三百首,不会作诗也会吟