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

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

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

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/27576.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elment表格组件a-table属性formatter

table中列属性formatter&#xff0c;格式化表格数据->处理表格中显示的内容&#xff08;像根据状态数值去显示当前状态对应的中文&#xff0c;或者处理一些是与否相间等&#xff09; 实现代码 <template><el-table-column v-for"(item,index) in columns&quo…

判断两张图片是否相似

判断两张图片是否相似 要判断两张图片是否相似&#xff0c;你可以使用多种方法&#xff0c;其中包括结构相似性指数&#xff08;SSIM&#xff09;和 perception hash 等。以下是使用 SSIM 和 perception hash 进行判断的示例代码。 安装必要的包 确保你已经安装了 scikit-im…

自制一个Linux live固件镜像ISO可引导系统

使用母盘镜像制作两个虚拟&#xff0c;来制作一个包含基本需求的filesystem.squashfs文件&#xff0c;具体看下面的链接 使用的安装镜像 是Linux Mint 制作好的成品 https://cloud.189.cn/t/U32Mvi7FnyA3 &#xff08;访问码&#xff1a;2nbo&#xff09; 最简单制作LIVE CD…

Python编程语言学习高阶:解决在 Python 项目中跨目录导入模块的问题的多种方法教程实战及其优劣对比

Python编程语言学习高阶:解决在 Python 项目中跨目录导入模块的问题的多种方法教程实战及其优劣对比 目录 解决在 Python 项目中跨目录导入模块的问题的多种方法教程实战及其优劣对比 T1、修改 sys.path:适用于简单的脚本开发和调试,灵活但不适合大规模项目 实现代码 T2…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第十一周) - 自然语言处理扩展研究

自然语言处理扩展研究 1. 多语言研究2. 语言锚定3. 伦理问题 1. 多语言研究 多语言(Multilinguality)是NLP的一个重要研究方向&#xff0c;旨在开发能够处理多种语言的模型和算法。由于不同语言在语法、词汇和语义结构上存在差异&#xff0c;这成为一个复杂且具有挑战性的研究…

【Android】文本服务器获取内容

链接web服务器&#xff0c;打开apaquee 收到数据 public void getNewsIndexData() throws Exception{String sUrl"http://10.107.24.12:8080/newsIndex.json";URL urlnew URL(sUrl);HttpURLConnection urlConn(HttpURLConnection) url.openConnection();InputStrea…

Web前端经验:探索、挑战与成长的奇幻之旅

Web前端经验&#xff1a;探索、挑战与成长的奇幻之旅 在数字世界的广阔天地中&#xff0c;Web前端技术犹如一把神奇的钥匙&#xff0c;打开了通往无限创意与可能的大门。身为一名Web前端开发者&#xff0c;我积累了丰富的经验&#xff0c;这些经验既是我成长的见证&#xff0c…

LeetCode-2779. 数组的最大美丽值【数组 二分查找 排序 滑动窗口】

LeetCode-2779. 数组的最大美丽值【数组 二分查找 排序 滑动窗口】 题目描述&#xff1a;解题思路一&#xff1a;滑动窗口与排序解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。 在一步操…

RAG工作流在高效信息检索中的应用

介绍 RAG&#xff08;Retrieval Augmented Generation&#xff09;是一种突破知识限制、整合外部数据并增强上下文理解的方法。 由于其高效地整合外部数据而无需持续微调&#xff0c;RAG的受欢迎程度正在飙升。 让我们来探索RAG如何克服LLM的挑战&#xff01; LLM知识限制大…

【docker】如何修改已有容器的端口映射

本文首发于 ❄️慕雪的寒舍 docker修改已有容器的端口映射 参考 https://www.jb51.net/article/257510.htm 1.需求 之前我在我的绿联nas上部署了一个centos容器&#xff0c;当时脑子抽了&#xff0c;没想起来要多映射几个端口。只映射了容器的22端口&#xff08;ssh&#xff0…

Bigtable: A Distributed Storage System for Structured Data

2003年USENIX&#xff0c;出自谷歌&#xff0c;开启分布式大数据时代的三篇论文之一&#xff0c;底层依赖 GFS 存储&#xff0c;上层供 MapReduce 查询使用 Abstract 是一种分布式结构化数据存储管理系统&#xff0c;存储量级是PB级别。存储的数据类型和延时要求差异都很大。…

【数学】【机器学习】什么是隐马尔可夫模型 (HMM)?

文章目录 隐马尔可夫模型 (HMM)背景公式示例题目详细讲解Python代码求解实际生活中的例子 什么是隐变量背景隐含变量的意义举例说明HMM的三个基本问题示例 隐马尔可夫模型 (HMM) 背景 隐马尔可夫模型&#xff08;Hidden Markov Model, HMM&#xff09;是一种统计模型&#xf…

有监督学习——梯度下降

1. 梯度下降 梯度下降&#xff08;Gradient Descent&#xff09;是计算机计算能力有限的条件下启用的逐步逼近、迭代求解方法&#xff0c;在理论上不保证下降求得最优解。 e.g. 假设有三维曲面表达函数空间&#xff0c;长(x)、宽(y)轴为子变量&#xff0c;高(z)是因变量&…

大模型企业落地:汽车行业知识大模型应用

前言 在当今这个信息爆炸的时代&#xff0c;知识管理成为了企业提升核心竞争力的关键。特别是在汽车行业这样一个技术密集、信息量庞大的领域&#xff0c;如何高效管理和利用知识资源&#xff0c;成为了每个企业必须面对的挑战。 汽车行业的知识管理痛点 汽车行业作为现代工…

10.错误处理

标题 一、概述二、panic!与不可恢复错误2.1 出错时2.2 示例2.3 panic!的 backtrace 三、Result 与可恢复的错误3.1 引入3.2 错误示例3.3 传播错误1&#xff09;概念2&#xff09;传播错误示例3&#xff09;传播错误的简写&#xff1a;&#xff1f;运算符 一、概述 Rust将错误分…

springboot网上书店管理系统-计算机毕业设计源码03780

摘 要 网上书店管理系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户两部分&#xff0c;管理员管理主要功能包括&#xff1a;首页、站点管理&#xff08;轮播图&#xff09;用户管理&#xff08;管理员、注册用户&#xff09;内容管理&#x…

NXP RT1060学习总结 - fsl_flexcan 基础CAN函数说明 -2

概要 CAN测试源码&#xff1a; https://download.csdn.net/download/qq_35671135/89425377 根据fsl_flexcan.h文件从文件末尾往前面梳理&#xff0c;总共30个基础CAN函数&#xff1b; 该文章只梳理常规CAN&#xff0c;增强型CAN后面再单独梳理。 使用的是RT1064开发板进行测试…

深入理解ReentrantLock

深入理解ReentrantLock 在Java并发编程中&#xff0c;锁&#xff08;Lock&#xff09;是控制多个线程对共享资源访问的重要工具。虽然Synchronized关键字是实现锁的常用方式&#xff0c;但它在功能上比较有限。ReentrantLock是java.util.concurrent.locks包中提供的一个更加灵…

FreeRTOS移植:STM32L476 nucleo-L476RG 开发板《02》

系列文章 FreeRTOS移植&#xff1a;STM32L476 nucleo-L476RG 开发板《01》 说明 上一篇 FreeRTOS移植&#xff1a;STM32L476 nucleo-L476RG 开发板《01》 主要讲了一下如何快速搭建一个 STM32 裸机工程&#xff0c;其实 STM32CubeMX 可以生成 FreeRTOS 的工程&#xff0c;这就…

python连接mysql数据库、FastAPI、mysql-connector-python

方法工具一、FastAPI 建议使用fast api中的pymysql pip3 install fastapi pip3 install pydantic pip3 install "uvicorn[standard]" pip3 中的3是 Python 3 版本的包管理器命令&#xff0c;用于安装和管理 Python 3 版本的第三方库。在某些系统中&#xff0c;同时…