RabbitMQ—HAProxy负载均衡

上篇文章:

RabbitMQ—仲裁队列https://blog.csdn.net/sniper_fandc/article/details/149312579?fromshare=blogdetail&sharetype=blogdetail&sharerId=149312579&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

目录

1 HAProxy安装

1.1 安装HAProxy

1.2 配置haproxy.cfg(配置负载均衡器监听的服务器和管理界面)

1.3 启动HAProxy

2 HAProxy使用


        前面讲到消息分发时可以对消费者进行负载均衡,当然面对多节点的RabbitMQ集群,也需要负载均衡。原因如下:

        1.写代码时,我们访问集群中任何一个节点都可以,但是如果我们访问的节点宕机,虽然集群还可以正常工作,但是我们的生产者或消费者服务很可能因为无法访问该节点就崩溃。因此,直接访问某个节点不太好,需要访问一个统一的入口,该入口来帮助负载均衡到不同的RabbitMQ节点。

        2.如果都只访问集群的某一个节点,容易导致该节点负载过大从而容易崩溃,而其它集群节点很可能比较空闲,因此需要把消息负载均衡到不同的RabbitMQ节点。

        这里介绍使用其它软件作为负载均衡器:

1 HAProxy安装

        HAProxy是一个开源的负载均衡器和TCP/HTTP应用程序的代理服务器,主要用来提供集群的高可用性、负载均衡和代理功能。HAProxy会把接受的请求分发到多个服务器,以提高网络的可靠性和性能。

1.1 安装HAProxy

        命令:yum -y install haproxy

1.2 配置haproxy.cfg(配置负载均衡器监听的服务器和管理界面)

        命令:vim /etc/haproxy/haproxy.cfg

        配置内容如下:

#haproxy监听集群配置listen rabbitmq_local_cluster 0.0.0.0:5670 #集群前端IP,供producter和consumer来进行选择,选择一个没有被占用的即可mode tcp #负载均衡选项balance roundrobin #轮询算法将负载发给后台服务器server rabbit1 127.0.0.1:5672 check inter 5000 rise 2 fall 3 #负载均衡器监听的集群节点配置,rabbitmq节点名称只在负载均衡器中使用(不一定和rabbitmq服务器名称一样),每5000秒一次健康检查,连续3次检查失败就停用该服务器,连续2次检查成功就恢复该服务器。server rabbit2 127.0.0.1:5673 check inter 5000 rise 2 fall 3server rabbit3 127.0.0.1:5674 check inter 5000 rise 2 fall 3#haproxy前端监控页面配置listen private_monitoring :8100mode httpoption httplogstats enablestats uri /stats #haproxy 前端页面stats refresh 60s # 60s刷新一次页面stats auth admin:admin #用户名和密码

1.3 启动HAProxy

        命令:systemctl start haproxy

2 HAProxy使用

        开启HAProxy后,生产者需要把与RabbitMQ连接的ip和端口号改为HAProxy所在的ip和其开发的端口号:

spring:rabbitmq:addresses: amqp://admin:admin@192.168.159.150:5670/testVirtual

        其它使用就和普通队列的消息发送无异了:

    @Bean("haproxyQueue")public Queue haproxyQueue(){return QueueBuilder.durable("haproxy.queue").quorum().build();}@RequestMapping("haproxy")public String haproxy() {rabbitTemplate.convertAndSend("", "haproxy.queue", "Hello SpringBoot RabbitMQ");return "发送成功";}

        运行结果如下:

        如果让其中一个节点宕机,生产者也不会出现连接异常,仍然可以发送消息:

        恢复宕机的节点,由于仲裁队列的同步能力,消息也同步到宕机节点上:

        注意:由于增加了负载均衡器,如果Haproxy所在节点也发生宕机,对于客户端来讲就无法与RabbitMQ交互,因此通常会用Keepalived等高可用解决方案对haproxy做主备,在HAProxy主节点故障时自动将流量转移到备用节点。这也体现了分布式环境解决高可用的特点,就是增加机器用备用节点备份。

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

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

相关文章

QT中启用VIM后粘贴复制快捷键失效

当在QT中启用FakeVim之后,Ctrl C 和 Ctrl V 快捷键就变成 Vim 的快捷键了,我希望它还是原来的复制粘贴功能,打开:编辑 > Preferences…,然后勾选 “Pass control keys”即可,如下:

TCP三次握手与四次挥手全解析

🌊 TCP三次握手与四次挥手全解析(含序列号动态追踪)🔑 TCP 协议核心机制 序列号 (seq):数据字节流的唯一标识(32位循环计数器)确认号 (ack):期望接收的下一个序列号(ack …

7月26号打卡

作业:题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一…

C++/CLI与标准C++的语法差异(一)

🌌 C/CLI与标准C的语法差异(一)🔬 第一章:类型系统革命 - 彻底解构三语言范式 🧪 1.1 类型声明语义差异矩阵 #mermaid-svg-L5kQ3iy05pKo4vIj {font-family:"trebuchet ms",verdana,arial,sans-se…

输电线路微气象在线监测装置:保障电网安全的科技屏障

在电力传输网络中,输电线路微气象在线监测装置通过集成专业传感器与智能分析技术,实现对线路周边环境参数的实时采集与动态分析,为电网运行安全提供数据支撑。该设备针对输电线路特殊工况设计,具备高适应性、高可靠性特点。工作原…

基于springboot的图书借阅系统

用户:借阅信息管理,续借信息管理,还书信息管理,图书信息,系统公告,留言板,我的中心管理员:图书信息管理,图书类型管理,借阅信息管理,续借信息管理…

Xinference vs SGLang:详细对比分析

概述对比特性XinferenceSGLang定位通用AI模型推理平台高性能LLM服务框架专注领域多模态模型统一接口LLM推理性能优化设计理念易用性和兼容性性能和效率核心架构对比 Xinference 架构特点 Xinference 架构: ├── API层(REST/CLI/Python) ├─…

双非上岸985!专业课140分经验!信号与系统考研专业课140+上岸中南大学,通信考研小马哥

一.经验分享个人情况:初试总分377,政治59,英语二75、数学二103、专业课140。本科为湖南一所双非一本,专业是电子信息工程,本科成绩一般,无奖学金无评优无科研竞赛,属于三无人员&…

配置DNS正反向解析

服务端master配置:yum install bind -y配置静态ip:修改配置文件:主:区域:正向解析:反向解析:开启服务:客户端node1配置:yum install nginx -y配置静态ip:使用xftp将文…

MyBatis-Plus 通用 Service

引言 在开发 Java Web 应用程序时,我们经常需要进行大量的数据库操作,如创建、读取、更新和删除(CRUD)。MyBatis-Plus 作为一个强大的 MyBatis 增强工具,为我们提供了通用 Service 接口,极大地简化了这些操…

聚类-一种无监督分类算法

目录 1、聚类任务 2、性能度量 (1)外部指标 (2)内部指标 3、具体聚类方法 (1)原型聚类 (2)密度聚类 (3)层次聚类 “无监督学习”(unsupervised learnin…

ES6 标签模板:前端框架的灵活利器

ES6(ECMAScript 2015)引入的模板字符串(Template Literals)为 JavaScript 开发者提供了更简洁的字符串处理方式,而模板字符串标签(Tagged Template Literals)则进一步扩展了其功能性。通过标签函…

解锁编程核心能力:深入浅出数据结构和算法

——为什么它们是你代码效率的终极武器? 🌟 引言:程序世界的基石 想象你正在建造摩天大楼:数据结构是钢筋骨架,决定建筑的结构与承重能力;算法则是施工蓝图,指导如何高效完成建造。两者结合&am…

Jenkins运行pytest时指令失效的原因以及解决办法

错误收集 Started by user 偷走晚霞的人 Running as SYSTEM Building in workspace C:\Users\Administrator\.jenkins\workspace\TestAAA [TestAAA] $ cmd /c call C:\Users\Administrator\AppData\Local\Temp\jenkins5821160869728612887.bat C:\Users\Administrator\.jenkins…

MySQL数据库本地迁移到云端完整教程

一、准备工作 安装MySQL客户端工具获取云端数据库连接信息: 主机地址端口号用户名密码数据库名二、本地数据库导出 mysqldump -h 127.0.0.1 -P 4406 -u root -p 数据库名 > backup.sql执行后会提示输入密码,完成后会在当前目录生成backup.sql文件 三、…

InvokeRepeating避免嵌套调用

InvokeRepeating嵌套这会导致指数级增长的重复调用堆叠。使用单一协程PeriodicActionRoutine替代所有InvokeRepeating避免方法间相互调用造成的堆叠如果需要多层级时间控制(如主循环子循环):IEnumerator MultiLevelTimer() {float mainInterv…

【工具】好用的浏览器AI助手

🧨 一、什么是 Sider? Sider 是一个 Chrome 浏览器插件,你可以把它看作一个「网页边上的 AI 小助手」。 🗣️ 它就像你网页旁边的 AI 机器人,可以帮你回答问题、总结文章、翻译、写文案、改写内容、甚至帮你学习英文&…

C++:list(2)list的模拟实现

list的模拟实现一.list与vector1.底层结构的本质区别2.模拟实现的核心差异2.1数据存储的方式2.2 初始化的过程2.3 插入元素的操作2.4 删除元素的操作2.5 访问元素的效率3.总结二.头文件list.h1. **命名空间与模板**2. **核心数据结构**3. **构造函数**4. **模板参数设计**5. **…

【595驱动8*8点阵】2022-9-11

缘由LED点阵屏只能一次亮一列-嵌入式-CSDN问答 #include "REG52.h" sbit dsP1^0;//数据线 595的14脚 sbit shP1^1;//数据输入时钟线 595的11脚 sbit stP1^2;//输出存储器锁存时钟线 595的12脚 void QuDong595(unsigned char sj) {unsigned char aa8;while(aa--){ds…

AI总结视频以及谷歌浏览器插件安装步骤

本篇介绍用AI一键总结全网视频内容的独家方法,支持B站、抖音、小红书等任何平台的视频,提高学习效率,帮助一键提取视频文案、划分章节,还能生成双语翻译,这个方法直接在线总结所有视频。 一.准备工作: 需要…