IBM MQ 调用失败,compcode“2”('MQCC_FAILED')原因“2059”
IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2059'
我正在尝试向 IBM MQ(版本:9.0.0.0)发送消息,代码如下。
* 我试过 with\without 用户名和密码。当我使用安装在我的机器 (localhost) 上的 IBM MQ 尝试相同的代码时,它运行顺利。
private static void foo() throws JMSException {
Request request = new Request();
request.setRequestKey("11-12347");
request.setQueryString("This is a query string!");
MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
cf.setHostName("192.168.1.107");
cf.setPort(1414);
cf.setAppName("WMQ Tester");
// cf.createConnection(sccsid, sccsid)
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setQueueManager("SanctionManager");
cf.setChannel("system.def.sanction");
MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection("hanash", "hanash1");
MQQueueSession session = (MQQueueSession) connection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("queue:///SanctionQueue");
MQQueueSender sender = (MQQueueSender) session.createSender(queue);
ObjectMessage objectMessage = session.createObjectMessage(request);
connection.start();
sender.send(objectMessage);
session.commit();
}
这给出了以下异常:
Exception in thread "main" com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to queue manager 'SanctionManager' with connection mode 'Client' and host name '192.168.1.107(1414)'.
Check the queue manager is started and if running in client mode, check there is a listener running. Please see the linked exception for more information.
at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:595)
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:215)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:422)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:8475)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7814)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl._createConnection(JmsConnectionFactoryImpl.java:299)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:236)
at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6024)
at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:136)
at com.dgbi.cre.MQSample.foo(MQSample.java:135)
at com.dgbi.cre.MQSample.main(MQSample.java:63)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2195' ('MQRC_UNEXPECTED_ERROR').
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
... 9 more
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2195;AMQ9204: Connection to host '192.168.1.107(1414)' rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2195;AMQ6047: Conversion not supported. [1=720,5=???]],3=192.168.1.107(1414),5=RemoteConnection.initSess]
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:2280)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1285)
at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnect(InterceptedJmqiImpl.java:376)
at com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnect(ESEJMQI.java:563)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:355)
... 8 more
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2195;AMQ6047: Conversion not supported. [1=720,5=???]
at com.ibm.mq.jmqi.remote.impl.RemoteConnection.initSess(RemoteConnection.java:1282)
at com.ibm.mq.jmqi.remote.impl.RemoteConnection.connect(RemoteConnection.java:863)
at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSessionFromNewConnection(RemoteConnectionSpecification.java:409)
at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSession(RemoteConnectionSpecification.java:305)
at com.ibm.mq.jmqi.remote.impl.RemoteConnectionPool.getSession(RemoteConnectionPool.java:146)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1721)
... 12 more
Caused by: java.io.UnsupportedEncodingException: 720
at com.ibm.mq.jmqi.remote.impl.RemoteConnection.initSess(RemoteConnection.java:1268)
... 17 more
这个异常是什么意思?我该如何解决?
异常中的关键错误是:
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2195;AMQ6047: Conversion not supported. [1=720,5=???]
Caused by: java.io.UnsupportedEncodingException: 720
这似乎是以下 APAR 中记录的 IBM MQ v9.0.0.0 中的一个已知问题:
此 APAR 已在 9.0.0.1 中修复。我建议您使用当前的 LTS(长期支持)版本 9.0.0.3。
如果您查看 APAR 并将其与您的问题进行比较,不同之处在于您正在连接到使用 CCSID 720 (MSDOS ARABIC) 设置的远程队列管理器。问题是您正在使用的 Java JRE 不支持此 CCSID,并且由于缺陷,客户端不会尝试将 CCSID 重新协商为 JRE 支持的 CCSID,并且连接失败并出现 2195 错误。
来自 JoshMC 的回答,阅读后:
IT17154: Java client fails to connect to z/OS with exception 'AMQ6047: conversion not supported' in a non-IBM Java runtime
解决该问题的一种方法是使用 IBM Java 版本构建应用程序。 (我确实做到了。)
我正在尝试向 IBM MQ(版本:9.0.0.0)发送消息,代码如下。
* 我试过 with\without 用户名和密码。当我使用安装在我的机器 (localhost) 上的 IBM MQ 尝试相同的代码时,它运行顺利。
private static void foo() throws JMSException {
Request request = new Request();
request.setRequestKey("11-12347");
request.setQueryString("This is a query string!");
MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
cf.setHostName("192.168.1.107");
cf.setPort(1414);
cf.setAppName("WMQ Tester");
// cf.createConnection(sccsid, sccsid)
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setQueueManager("SanctionManager");
cf.setChannel("system.def.sanction");
MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection("hanash", "hanash1");
MQQueueSession session = (MQQueueSession) connection.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("queue:///SanctionQueue");
MQQueueSender sender = (MQQueueSender) session.createSender(queue);
ObjectMessage objectMessage = session.createObjectMessage(request);
connection.start();
sender.send(objectMessage);
session.commit();
}
这给出了以下异常:
Exception in thread "main" com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to queue manager 'SanctionManager' with connection mode 'Client' and host name '192.168.1.107(1414)'.
Check the queue manager is started and if running in client mode, check there is a listener running. Please see the linked exception for more information.
at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:595)
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:215)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:422)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:8475)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7814)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl._createConnection(JmsConnectionFactoryImpl.java:299)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:236)
at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6024)
at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:136)
at com.dgbi.cre.MQSample.foo(MQSample.java:135)
at com.dgbi.cre.MQSample.main(MQSample.java:63)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2195' ('MQRC_UNEXPECTED_ERROR').
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
... 9 more
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2195;AMQ9204: Connection to host '192.168.1.107(1414)' rejected. [1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2195;AMQ6047: Conversion not supported. [1=720,5=???]],3=192.168.1.107(1414),5=RemoteConnection.initSess]
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:2280)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1285)
at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnect(InterceptedJmqiImpl.java:376)
at com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnect(ESEJMQI.java:563)
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:355)
... 8 more
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2195;AMQ6047: Conversion not supported. [1=720,5=???]
at com.ibm.mq.jmqi.remote.impl.RemoteConnection.initSess(RemoteConnection.java:1282)
at com.ibm.mq.jmqi.remote.impl.RemoteConnection.connect(RemoteConnection.java:863)
at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSessionFromNewConnection(RemoteConnectionSpecification.java:409)
at com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSession(RemoteConnectionSpecification.java:305)
at com.ibm.mq.jmqi.remote.impl.RemoteConnectionPool.getSession(RemoteConnectionPool.java:146)
at com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect(RemoteFAP.java:1721)
... 12 more
Caused by: java.io.UnsupportedEncodingException: 720
at com.ibm.mq.jmqi.remote.impl.RemoteConnection.initSess(RemoteConnection.java:1268)
... 17 more
这个异常是什么意思?我该如何解决?
异常中的关键错误是:
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2195;AMQ6047: Conversion not supported. [1=720,5=???]
Caused by: java.io.UnsupportedEncodingException: 720
这似乎是以下 APAR 中记录的 IBM MQ v9.0.0.0 中的一个已知问题:
此 APAR 已在 9.0.0.1 中修复。我建议您使用当前的 LTS(长期支持)版本 9.0.0.3。
如果您查看 APAR 并将其与您的问题进行比较,不同之处在于您正在连接到使用 CCSID 720 (MSDOS ARABIC) 设置的远程队列管理器。问题是您正在使用的 Java JRE 不支持此 CCSID,并且由于缺陷,客户端不会尝试将 CCSID 重新协商为 JRE 支持的 CCSID,并且连接失败并出现 2195 错误。
来自 JoshMC 的回答,阅读后:
IT17154: Java client fails to connect to z/OS with exception 'AMQ6047: conversion not supported' in a non-IBM Java runtime
解决该问题的一种方法是使用 IBM Java 版本构建应用程序。 (我确实做到了。)