目录
一、使用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
daemon
defaults
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:admin
listen 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:15675
listen 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
java
@Test
public void test9(){
rabbitTemplate.convertAndSend("exchange.cluster","cluster","测试集群");
}
java
@RabbitListener(queues = {"queue.cluster"})
public void getMessagePriority(String date, Message message, Channel channel) throws Exception {
//获取当前deliveryTagID
long deliveryTag = message.getMessageProperties().getDeliveryTag();
//成功返回ACK信息
channel.basicAck(deliveryTag,false);
log.info("接收消息为:" + date);
}
四、仲裁队列替代镜像队列
4.1、创建交换机与队列关系
交换机正常创建:exchange.quorum
队列创建:
路由键正常绑定
测试代码:
java
@Test
public void test10(){
rabbitTemplate.convertAndSend("exchange.quorum","quorum","测试仲裁队列");
}
java
@RabbitListener(queues = {"queue.quorum"})
public void getMessageQuorum(String date, Message message, Channel channel) throws Exception {
//获取当前deliveryTagID
long deliveryTag = message.getMessageProperties().getDeliveryTag();
//成功返回ACK信息
channel.basicAck(deliveryTag,false);
log.info("接收消息为:" + date);
}
即使某个节点挂掉,其他依然可以正常工作