如何配置JBoss EAP连接IBM WebSphere MQ多实例队列管理器实现高可用
配置JBoss EAP 6.4连接IBM WebSphere MQ多实例队列管理器(高可用)
我来帮你一步步梳理JBoss EAP 6.4连接WebSphere MQ多实例队列管理器实现高可用的配置方法,重点聚焦在standalone.xml的具体配置细节上:
1. 前置准备
- 先确保你已经在JBoss EAP 6.4的
modules目录下部署了WebSphere MQ的资源适配器(wmq.jmsra.rar)。如果还没部署,把rar文件放到com/ibm/mq/main目录下,同时创建对应的module.xml来声明这个模块(模块配置要指定依赖的JAR包和资源适配器路径)。
2. 配置资源适配器与高可用连接工厂
找到standalone.xml里的<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">节点,添加以下配置(替换掉占位符里的实际MQ信息):
<resource-adapters> <resource-adapter id="wmq.jmsra.rar"> <archive> wmq.jmsra.rar </archive> <!-- 全局资源适配器配置 --> <config-property name="hostName">MQ_HOST1,MQ_HOST2</config-property> <!-- 多实例主机,逗号分隔 --> <config-property name="port">1414,1414</config-property> <!-- 对应端口,端口相同重复写,不同则分别填写 --> <config-property name="queueManager">YOUR_QMGR_NAME</config-property> <config-property name="channel">YOUR_CHANNEL_NAME</config-property> <config-property name="transportType">CLIENT</config-property> <!-- 高可用连接工厂配置 --> <connection-definitions> <connection-definition class-name="com.ibm.mq.connector.outbound.ManagedQueueConnectionFactoryImpl" jndi-name="java:/jms/MQConnectionFactory" enabled="true" pool-name="MQConnectionFactoryPool"> <config-property name="hostName">MQ_HOST1,MQ_HOST2</config-property> <config-property name="port">1414,1414</config-property> <config-property name="queueManager">YOUR_QMGR_NAME</config-property> <config-property name="channel">YOUR_CHANNEL_NAME</config-property> <config-property name="transportType">CLIENT</config-property> <!-- 高可用核心配置 --> <config-property name="failover">true</config-property> <!-- 开启故障转移 --> <config-property name="reconnectionRetryCount">5</config-property> <!-- 重连重试次数 --> <config-property name="reconnectionRetryInterval">3000</config-property> <!-- 重连间隔(毫秒) --> <!-- 连接池有效性检查 --> <security> <application/> </security> <validation> <background-validation>true</background-validation> <background-validation-millis>60000</background-validation-millis> <!-- 每分钟检查一次连接有效性 --> </validation> </connection-definition> </connection-definitions> <!-- 配置目标队列(示例) --> <admin-objects> <admin-object class-name="com.ibm.mq.connector.outbound.MQQueueProxy" jndi-name="java:/jms/QUEUE/MyQueue" enabled="true" use-java-context="true" pool-name="MyQueuePool"> <config-property name="baseQueueName">MY_QUEUE_NAME</config-property> <config-property name="queueManager">YOUR_QMGR_NAME</config-property> </admin-object> </admin-objects> </resource-adapter> </resource-adapters>
关键配置说明
hostName和port:填写所有MQ多实例的主机和端口,逗号分隔后,MQ客户端会自动轮询尝试连接可用实例failover=true:开启故障转移机制,当主实例宕机时,客户端会自动切换到备用实例reconnectionRetryCount/reconnectionRetryInterval:控制实例切换后的重连逻辑,避免短时间内频繁重试background-validation:定期检查连接池中的连接有效性,及时剔除失效连接,保证可用连接的可靠性
3. 可选:JMS子系统关联配置
如果需要通过JBoss的JMS子系统统一管理连接,可以在<subsystem xmlns="urn:jboss:domain:messaging:1.4">节点下添加连接工厂引用:
<jms-connection-factories> <connection-factory name="MQConnectionFactory"> <connectors> <connector-ref connector-name="in-vm"/> </connectors> <entries> <entry name="java:/ConnectionFactory"/> <entry name="java:jboss/exported/jms/ConnectionFactory"/> </entries> <xa-pool> <min-pool-size>1</min-pool-size> <max-pool-size>20</max-pool-size> <prefill>true</prefill> </xa-pool> </connection-factory> </jms-connection-factories>
4. 配置验证
- 启动JBoss EAP 6.4,查看服务器日志,确认资源适配器、连接工厂和队列都成功部署,无报错信息
- 编写简单的JMS客户端代码,通过JNDI lookup获取连接工厂和队列,进行消息收发测试;手动停止MQ主实例,观察客户端是否能自动切换到备用实例,消息收发是否正常
注意事项
- 确保WebSphere MQ多实例队列管理器已正确配置:主备实例共享队列管理器数据目录,且能自动完成主备切换
- 资源适配器版本要与MQ服务器版本兼容,避免版本不匹配导致的连接异常
- 如果需要身份认证,在连接工厂配置中添加
userName和password的config-property,或者通过JAAS配置实现认证
内容的提问来源于stack exchange,提问作者Bhanu




