IBM MQ同连接工厂实现多连接负载均衡与故障转移问询
解决IBM MQ单连接工厂实现负载均衡与故障转移的方案
给定的MQ连接地址
tstu2012643.xyz.com:51671/GL210031/CLIENT.T.POTRANS?transport=1 tstu2012644.xyz.com:51671/GL210032/CLIENT.T.POTRANS?transport=1
核心方案:单连接工厂配置实现需求
完全可以通过单连接工厂配置实现轮询负载均衡和自动故障转移,无需修改队列管理器名称,具体配置如下:
1. 正确配置ConnectionNameList及核心参数
将两个MQ地址转换为IBM MQ连接工厂要求的格式,同时配置负载均衡和故障转移相关参数:
- 设置
setConnectionNameList为:tstu2012643.xyz.com(51671),tstu2012644.xyz.com(51671) - 设置通道名称:
CLIENT.T.POTRANS(对应URL中的通道名) - 设置队列管理器名称:使用现有共用名称(无需修改,两个节点共用该名称不影响配置)
- 开启轮询负载均衡:设置
setLoadBalancingPolicy(WMQConstants.WMQ_LOAD_BALANCE_ROUND_ROBIN) - 开启自动故障转移:设置
setClientReconnectOptions(WMQConstants.WMQ_CLIENT_RECONNECT),连接失效时自动切换至可用节点
2. 解决连接池失效连接问题
针对连接池内失效连接无法切换的问题,需配合连接池有效性检测配置:
- 若使用Spring的
CachingConnectionFactory:- 开启
testOnBorrow=true,每次获取连接时验证有效性 - 或开启
testWhileIdle=true,定期检查并清理空闲失效连接
- 开启
- 验证逻辑可通过调用MQ连接的
isOpen()方法判断存活状态,确保失效连接被及时剔除
3. 关键说明
- 队列管理器名称无需修改:IBM MQ允许
ConnectionNameList配置多个运行相同/不同队列管理器名称的节点,只要通道配置一致即可正常连接 - 故障转移自动触发:节点故障时,MQ客户端会自动尝试连接列表中的下一个可用节点
- 负载均衡按轮询分配:新连接会按顺序分配到不同节点,实现消息发送的负载分摊
4. 验证步骤
- 负载均衡验证:发送10+条消息,查看MQ节点日志,确认消息轮询分配到两个节点
- 故障转移验证:停止其中一个节点的MQ服务,继续发送消息,确认消息正常投递至另一个节点
- 恢复验证:重启故障节点,确认后续消息重新被轮询分配至该节点
内容的提问来源于stack exchange,提问作者Kumar Chidepudi
相关产品推荐
相关产品推荐

