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

MQJE001:完成码'2'、原因码'2495'批量发消息报错求助

IBM MQ发送多条消息报错MQJE001: Completion Code '2', Reason '2495'排查

我尝试用以下Java代码向IBM MQ发送多条消息:

public static void main(String[] args) {
        int openOptions = CMQC.MQOO_INQUIRE | CMQC.MQOO_OUTPUT;
        MQEnvironment.hostname = "192.168.0.13";
        MQEnvironment.port = 1414;
        MQEnvironment.channel = "SYSTEM.DEF.SVRCONN";
        MQEnvironment.properties.put(CMQC.TRANSPORT_PROPERTY, CMQC.TRANSPORT_MQSERIES);

        MQQueueManager qMgr;
        MQMessage tmpMsg = new MQMessage();
        try {
            qMgr = new MQQueueManager("QM1");
            MQQueue destQueue = qMgr.accessQueue("TESTQ", openOptions);

            tmpMsg.write("Msg1".getBytes());
            destQueue.put(tmpMsg, pmo);
            tmpMsg.clearMessage();

            tmpMsg.write("Msg2".getBytes());
            destQueue.put(tmpMsg, pmo);

            destQueue.close();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
          if(qMgr != null)
            qMgr.disconnect();
        }

    }

但程序抛出错误MQJE001: Completion Code '2', Reason '2495'。我看到其他帖子提到可能是程序设置为绑定模式连接,但我的openOptions中未配置相关内容,请问该问题的原因是什么?


更新信息

我使用的客户端依赖为com.ibm.mq.allclient 9.3.2.0:

<dependency>
    <groupId>com.ibm.mq</groupId>
    <artifactId>com.ibm.mq.allclient</artifactId>
    <version>9.3.2.0</version>
</dependency>

问题原因及解决方法

核心报错原因

MQ Reason Code 2495对应MQRC_UNEXPECTED_ERROR,本次报错的直接诱因是未初始化MQPutMessageOptions(即代码中的pmo变量)。调用destQueue.put()方法时,传入未初始化的pmo会导致客户端内部逻辑异常,最终触发该错误码。

关于绑定模式的误解

绑定模式的配置与openOptions无关,而是由TRANSPORT_PROPERTY决定。你设置的CMQC.TRANSPORT_MQSERIES属于自动模式,当客户端与MQ服务器同主机时会优先尝试绑定模式,失败后才切换到客户端模式,但这不是本次报错的直接原因。若要明确指定客户端模式,可改为CMQC.TRANSPORT_MQSERIES_CLIENT。

修复后的代码示例

public static void main(String[] args) {
    int openOptions = CMQC.MQOO_INQUIRE | CMQC.MQOO_OUTPUT;
    MQEnvironment.hostname = "192.168.0.13";
    MQEnvironment.port = 1414;
    MQEnvironment.channel = "SYSTEM.DEF.SVRCONN";
    // 明确指定客户端模式,避免自动模式切换
    MQEnvironment.properties.put(CMQC.TRANSPORT_PROPERTY, CMQC.TRANSPORT_MQSERIES_CLIENT);

    MQQueueManager qMgr = null;
    MQMessage tmpMsg = new MQMessage();
    // 初始化Put Message Options
    MQPutMessageOptions pmo = new MQPutMessageOptions();

    try {
        qMgr = new MQQueueManager("QM1");
        MQQueue destQueue = qMgr.accessQueue("TESTQ", openOptions);

        tmpMsg.write("Msg1".getBytes());
        destQueue.put(tmpMsg, pmo);
        tmpMsg.clearMessage();

        tmpMsg.write("Msg2".getBytes());
        destQueue.put(tmpMsg, pmo);

        destQueue.close();
        System.out.println("消息发送成功");

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        if(qMgr != null) {
            qMgr.disconnect();
        }
    }
}

额外检查点

  • 确认MQ服务器的SYSTEM.DEF.SVRCONN通道允许客户端连接,且队列管理器QM1处于运行状态。
  • 验证队列TESTQ已创建,且客户端用户拥有向该队列写入消息的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:42:45