目录
一、使用docker搭建集群
二、使用docker安装Haproxy
三、使用springboot进行测试
3.1、创建交换机与队列关系
四、仲裁队列替代镜像队列
4.1、创建交换机与队列关系
一、使用docker搭建集群
由于contos7环境不能装rabbitmq3.13版本的,采用docker安装避免报错
cd /tmp
# 创建文件
touch rabbitmq.conf
文件内容
loopback_users.guest = false
listeners.tcp.default = 5672
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@mq1
cluster_formation.classic_config.nodes.2 = rabbit@mq2
cluster_formation.classic_config.nodes.3 = rabbit@mq3
default_user = guest
default_pass = 123456
# 创建cookie文件
touch .erlang.cookie
# 写入cookie
echo "Jh98lPqRstUvA43x" > .erlang.cookie
# 修改cookie文件的权限
chmod 600 .erlang.cookie
# 创建目录
mkdir mq1 mq2 mq3
# 拷贝
cp rabbitmq.conf mq1
cp rabbitmq.conf mq2
cp rabbitmq.conf mq3
cp .erlang.cookie mq1
cp .erlang.cookie mq2
cp .erlang.cookie mq3创建一个网络
docker network create mq-net
docker run -d --net mq-net \
-v ${PWD}/mq1/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v ${PWD}/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
--name mq1 \
--hostname mq1 \
-p 8071:5672 \
-p 8081:15672 \
rabbitmq:3-management
docker run -d --net mq-net \
-v ${PWD}/mq2/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v ${PWD}/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
--name mq2 \
--hostname mq2 \
-p 8072:5672 \
-p 8082:15672 \
rabbitmq:3-management
docker run -d --net mq-net \
-v ${PWD}/mq3/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v ${PWD}/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
--name mq3 \
--hostname mq3 \
-p 8073:5672 \
-p 8083:15672 \
rabbitmq:3-management
二、使用docker安装Haproxy
文件内容:
#文件内容
global
#日志
log 127.0.0.1 local0 info
maxconn 10240
daemondefaults
log global
mode http
timeout connect 3000 #连接超时
timeout client 3000 #客户端超时
timeout server 3000 #服务器超时
timeout check 2000 #心跳检测超时listen admin_stats
#监控界面的访问的IP和端口
bind 0.0.0.0:8084
#访问协议
mode http
#URI相对地址
stats uri /stats
#统计报告格式
stats realm Global\ statistics
#登陆帐户信息
stats auth admin:adminlisten rabbitmq_admin#rabbit的监控页面
bind 0.0.0.0:8085
server rabbit_admin1 172.31.0.110:15673 #自己的rabbitmq前端访问界面
server rabbit_admin2 172.31.0.110:15674
server rabbit_admin3 172.31.0.110:15675listen haproxy #这里配置集群负载均衡
bind 0.0.0.0:5666 #对外提供的端口,访问这个端口就会根据配置的规则对集群下的节点进行相应的负载均衡
option tcplog
mode tcp
balance roundrobin #这是轮询算法,如有需要可以换成其他
#每次换一个节点进行使用
server rabbit1 172.31.0.110:5673 check inter 5000 rise 2 fall 2 #rabbitmq后端访问界面
server rabbit2 172.31.0.110:5674 check inter 5000 rise 2 fall 2
server rabbit3 172.31.0.110:5675 check inter 5000 rise 2 fall 2
运行容器
run -d --name haproxy-rabbitmq -p 8084:8084 -p 5666:5666 -p 8085:8085 -v /opt/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg haproxy:latest
负载均衡访问rabbitmq
三、使用springboot进行测试
3.1、创建交换机与队列关系
交换机:exchange.cluster
队列:queue.cluster
路由键:cluster
@Testpublic void test9(){rabbitTemplate.convertAndSend("exchange.cluster","cluster","测试集群");}
@RabbitListener(queues = {"queue.cluster"})public void getMessagePriority(String date, Message message, Channel channel) throws Exception {//获取当前deliveryTagIDlong deliveryTag = message.getMessageProperties().getDeliveryTag();//成功返回ACK信息channel.basicAck(deliveryTag,false);log.info("接收消息为:" + date);}
四、仲裁队列替代镜像队列
4.1、创建交换机与队列关系
交换机正常创建:exchange.quorum
队列创建:
路由键正常绑定
测试代码:
@Testpublic void test10(){rabbitTemplate.convertAndSend("exchange.quorum","quorum","测试仲裁队列");}
@RabbitListener(queues = {"queue.quorum"})public void getMessageQuorum(String date, Message message, Channel channel) throws Exception {//获取当前deliveryTagIDlong deliveryTag = message.getMessageProperties().getDeliveryTag();//成功返回ACK信息channel.basicAck(deliveryTag,false);log.info("接收消息为:" + date);}
即使某个节点挂掉,其他依然可以正常工作