Java17 --- RabbitMQ搭建集群

目录

一、使用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

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);
    }

即使某个节点挂掉,其他依然可以正常工作

相关推荐
Jiangnan_Cai3 分钟前
Linux 系统 docker 部署 Dify
linux·docker·大模型·dify
Two_brushes.1 小时前
【linux网络】深入理解 TCP/UDP:从基础端口号到可靠传输机制全解析
linux·运维·服务器
FJW0208141 小时前
【Linux】系统引导修复
linux·运维·服务器
慌糖1 小时前
CentOS 安装 Redis 简明指南
linux·redis·centos
设计师小聂!1 小时前
linux常用命令(一)
linux·运维·服务器
hnlucky2 小时前
《Nginx + 双Tomcat实战:域名解析、静态服务与反向代理、负载均衡全指南》
java·linux·服务器·前端·nginx·tomcat·web
cui_win2 小时前
【网络】Linux 内核优化实战 - net.ipv4.tcp_congestion_control
linux·网络·tcp/ip
笑稀了的野生俊3 小时前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32‘ not found
linux·人工智能·ubuntu·大模型·glibc·flash-attn
千帐灯无此声3 小时前
Linux 测开:日志分析 + 定位 Bug
linux·c语言·c++·bug
誰能久伴不乏3 小时前
深入了解 Vim 编辑器:从入门到精通
linux·编辑器·vim