ActiveMQ集群的简单介绍

本文介绍了为何使用ActiveMQ集群以实现高可用和负载均衡,详细讲解了Broker Clusters和Master Slave两种部署模式。重点阐述了失效转移连接策略,确保消费者在broker出现问题时能自动连接到其他正常broker,保证服务连续性。同时讨论了在master slave + broker cluster环境中,客户端如何采用failover协议避免连接到slave导致的超时问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.为什么使用集群?
实现高可用,以排除单点故障引起的服务中断。

实现负载均衡,以提升效率为更多的客户提供服务。

2.ActiveMQ集群部署方式
ActiveMQ集群的部署方式主要有下面2种:

Broker Clusters模式:实现负载均衡,多个broker之间同步消息,已达到服务器负载的可能。

Master Slave模式:实现高可用,当主服务器宕机时,备用服务器可以立即补充,以保证服务的继续。

失效转移连接

该策略用于控制消费者的访问,这是我们在编写代码的时候要使用的连接方式。一个消费者连接到多个broker集群的中的一个broker,当该broker出问题时,消费者自动连接到其他一个正常的broker。消费者使用failover协议来连接broker,通常叫做失效转移(也叫故障转移,断线重连机制,FailOver)策略,语法如下:

failover:(uri1,uri2,...,uriN)?transportOptions
uri:消息服务器的地址 
transportOptions参数说明: 
    randomize:默认为 true ,表示在URI列表中选择URL连接时是否采用随机策略。 
    initialReconnectDelay:默认为10,单位为毫秒,表示一次尝试重连之间等待的时间。 
    maxReconnectDelay:默认 30000,单位毫秒,最长重连的时间间隔。

例如:

<!-- 
    1. client使用failover协议来与有效的master交互  
    2. master地址在前,slavew 在后,randomize 为 false让 Client优先与master通信  
    3. 如果 master 失效,failover协议将会尝试与slave建立链接,并依此重试
-->
failover:(tcp://localhost:61616,tcp://localhost:61617)?randomize=false

下面考虑一下master slave + broker cluster环境下客户端的失效转移链接。

举例,客户端:

<property name="brokerURL" value="failover:(tcp://uri1:port,
                                      tcp://uri2:port,
                                      tcp://uri3:port,
                                      tcp://uri4:port,
                                      tcp://uri5:port,
                                      tcp://uri6:port)?startupMaxReconnectAttempts=2" />

uri1~uri3构成一个高可用集群,其中只有一个broker是master ,另外的两个broker是slave,slave不接受客户端的请求,只是对master的数据进行同步(个人觉得不接受客户端的请求太过分了,最起码可以将请求转发给maser也行啊),客户端若没有采用失效转移机制而直接去链接集群中的某一个broker;如下:

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://192.168.8.201:61616");

此时很有可能你链接到的是slave,而不是master,而salve是完全不接受客户端的请求,更不会好心肠的给你转发给master,所以必然的结果就是链接超时。如果运气好直接链接的就是master,那是没有问题的,客户端可以得到响应。

采用failover,会在提供的uri列表中不断尝试链接,在同一次尝试过程中对于无效的联机,只会访问一次。

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("failover:(tcp://192.168.8.201:61616,tcp://192.168.8.202:61616,tcp://192.168.8.203:61616)?startupMaxReconnectAttempts=2");

基于此,uri1uri3构成一个高可用集群,uri4uri6构成另外一个高可用集群,组内高可用,组件负载均衡。无论是producer还是consumer一定会在failover的指导下,链接到某一组的master上,若链接到同一组的master,消息的产生和消费就是顺利成章。若producer和consumer了解到不同组的master,则consumer所链接的master会通过network of broker机制去producer所在集群中请求消息,然后返回给consumer。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值