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

使用Hashtable创建MQQueueManager时遇MQJE001:完成码2,原因码2538

解决MQJE001: Completion Code '2', Reason '2538' 错误

Reason 2538对应MQRC_HOST_NOT_AVAILABLE,本质是Java客户端无法连接到目标MQ队列管理器,以下是针对你的场景的排查步骤和修复方案:

1. 补全代码缺失的关键变量

你的代码里CHANNEL变量未定义,这是核心问题!MQ连接必须指定服务器连接通道,先补上这个变量(替换为你实际使用的通道名称,默认通道可使用SYSTEM.DEF.SVRCONN):

static private String CHANNEL = "SYSTEM.DEF.SVRCONN";

2. 检查MQ服务状态

  • 执行dspmq命令,确认队列管理器QM1的状态为RUNNING,若未启动则执行strmqm QM1启动。
  • 进入QM1的命令行控制台:runmqsc QM1,执行DISPLAY LISTENER查看监听配置,确认端口为1417且监听状态是STARTED。若监听未启动,执行START LISTENER;若端口不符,修改配置后重启监听。

3. 验证网络连通性

  • 在运行代码的机器上,用telnet localhost 1417或nc -zv localhost 1417测试端口是否能连通。连接失败则说明端口未开放或MQ监听未正常启动。
  • 若MQ服务器在远程,需检查防火墙是否允许1417端口的TCP流量。

修正后的完整代码示例(含异常处理)

import com.ibm.mq.*;
import java.util.Hashtable;

public class MQTest {
    static private int PORT = 1417;
    static private String HOST = "localhost";
    static private String QMANAGER = "QM1";
    static private String QUEUE = "Q1";
    static private String CHANNEL = "SYSTEM.DEF.SVRCONN";

    public static void main(String[] args) {
        Hashtable<String, Object> props = new Hashtable<>();
        MQQueueManager qMgr = null;
        MQQueue queue = null;

        props.put(MQConstants.CHANNEL_PROPERTY, CHANNEL);
        props.put(MQConstants.PORT_PROPERTY, PORT);
        props.put(MQConstants.HOST_NAME_PROPERTY, HOST);

        try {
            qMgr = new MQQueueManager(QMANAGER, props);
            System.out.println("成功连接到队列管理器: " + QMANAGER);

            int openOptions = MQConstants.MQOO_OUTPUT;
            queue = qMgr.accessQueue(QUEUE, openOptions);

            MQPutMessageOptions pmo = new MQPutMessageOptions();
            pmo.options = MQConstants.MQPMO_ASYNC_RESPONSE;

            MQMessage mqMessage = new MQMessage();
            String message = "Test";
            System.out.println("向队列写入消息: " + QUEUE);
            mqMessage.writeString(message);

            queue.put(mqMessage, pmo);
            System.out.println("消息发送成功");

        } catch (MQException e) {
            System.err.println("MQ错误: Completion Code " + e.completionCode + ", Reason " + e.reasonCode);
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (queue != null) queue.close();
                if (qMgr != null) qMgr.disconnect();
            } catch (MQException e) {
                e.printStackTrace();
            }
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:25:25