You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenShift环境Spring Boot连接IBM MQ报2538异常原因咨询

OpenShift环境Spring Boot连接IBM MQ报MQRC_HOST_NOT_AVAILABLE(2538)原因排查

问题背景

Spring Boot应用运行在OpenShift环境,需对接IBM MQ服务,JMS相关配置已写入application.yaml,应用启动时抛出连接异常。

错误堆栈

Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2538' ('MQRC_HOST_NOT_AVAILABLE').
         at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         ... 96 common frames omitted
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2538;AMQ9204: Connection to host 'localhost(1414)' rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2538;AMQ9204: Connection to host 'localhost/127.0.0.1:1414' rejected. [1=java.net.ConnectException[Connection refused (Connection refused)],3=localhost/127.0.0.1:1414,4=TCP,5=Socket.connect]],3=localhost(1414),4=,5=RemoteTCPConnection.bindAndConnectSocket]
         at com.ibm.mq.jmqi.remote.api.RemoteFAP$Connector.jmqiConnect(RemoteFAP.java:13610) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.mq.jmqi.remote.api.RemoteFAP$Connector.access$100(RemoteFAP.java:13150) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1449) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1390) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnect(InterceptedJmqiImpl.java:377) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnect(ESEJMQI.java:562) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:391) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         ... 95 common frames omitted
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2538;AMQ9204: Connection to host 'localhost/127.0.0.1:1414' rejected. [1=java.net.ConnectException[Connection refused (Connection refused)],3=localhost/127.0.0.1:1414,4=TCP,5=Socket.connect]
         at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.bindAndConnectSocket(RemoteTCPConnection.java:932) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.mq.jmqi.remote.impl.RemoteTCPConnection.protocolConnect(RemoteTCPConnection.java:1419) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.mq.jmqi.remote.impl.RemoteConnection.connect(RemoteConnection.java:1012) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getNewConnection(RemoteConnectionSpecification.java:688) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSessionFromNewConnection(RemoteConnectionSpecification.java:282) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSession(RemoteConnectionSpecification.java:181) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.mq.jmqi.remote.impl.RemoteConnectionPool.getSession(RemoteConnectionPool.java:127) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         at com.ibm.mq.jmqi.remote.api.RemoteFAP$Connector.jmqiConnect(RemoteFAP.java:13350) ~[com.ibm.mq.allclient-9.2.4.0.jar:9.2.4.0 - p924-L211104]
         ... 101 common frames omitted

现有配置

spring:
  environment: DEV
  jms:
    wmq:
      host: mq.cloud-mq.svc.cluster.local
      port: 1414
      queue-manager:
      channel: DEV.APP.SVRCONN

可能的故障原因

从堆栈信息可以直接看到,MQ客户端实际尝试连接的地址是localhost/127.0.0.1:1414,和配置里写的内部Service域名完全不一致,优先排查配置加载问题,再排查网络和服务端问题:

  • 配置前缀不匹配,自定义配置未生效:Spring Boot官方IBM MQ Starter默认读取的配置前缀是spring.jms.ibm.mq.*,当前yaml里写的是spring.jms.wmq.*,如果没有自定义@ConfigurationProperties绑定类做映射,这套配置根本不会被MQ连接工厂读取,客户端会直接使用默认值localhost:1414发起连接,这是该问题最常见的诱因。
  • 自定义配置类未被Spring容器识别:如果是自己实现配置类读取MQ参数,要检查:
    • 配置类上的@ConfigurationProperties注解指定的前缀是否和yaml路径一致
    • 配置类是否加了@Component注解,或者有没有在启动类/配置类上加@EnableConfigurationProperties指定要加载的配置类,否则参数值不会注入到连接工厂Bean中
  • OpenShift集群网络连通性异常:如果确认配置已经正确加载,客户端实际读取到了配置的Service域名,再排查网络问题:
    • 进入应用Pod,用nc -zv mq.cloud-mq.svc.cluster.local 1414或者telnet命令测试端口连通性
    • 检查MQ服务和应用是否在同一命名空间,跨命名空间访问时Service的全域名是否配置正确
    • 检查MQ对应的Service、Endpoint资源是否正常,是否正确关联到运行中的MQ Pod,1414端口是否在Service中正确暴露
    • 检查OpenShift NetworkPolicy规则,是否放通了应用Pod到MQ服务1414端口的访问权限
  • IBM MQ服务端异常:
    • MQ队列管理器是否正常启动,TCP监听器是否正常监听1414端口
    • MQ监听器是否绑定了0.0.0.0地址,如果只绑定127.0.0.1会拒绝所有外部连接请求
  • 空配置项触发参数 fallback:当前配置中queue-manager的值为空,部分低版本的IBM MQ客户端在参数存在空值时,会触发连接参数初始化失败,自动回退到默认的本地连接参数,可以先填入实际的队列管理器名称再做验证。

内容的提问来源于stack exchange,提问作者user2023141

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:06:22