Jms IBM MQ创建上下文抛出com.IBM.MQ.jmqi.jmqi异常“未远程定义通道”(RC 2540)
尝试创建上下文时,此代码引发以下异常:Jms IBM MQ创建上下文抛出com.IBM.MQ.jmqi.jmqi异常“未远程定义通道”(RC 2540),jms,ibm-mq,Jms,Ibm Mq,尝试创建上下文时,此代码引发以下异常: package com.mycompany.mq.client; import static org.junit.Assert.assertEquals; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URL; import java.util.logging.Logger; import j
package com.mycompany.mq.client;
import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Logger;
import javax.jms.JMSConsumer;
import javax.jms.JMSContext;
import javax.jms.JMSProducer;
import javax.jms.Queue;
import javax.jms.TextMessage;
import org.junit.Assert;
import org.junit.Test;
import com.ibm.msg.client.jms.JmsConnectionFactory;
import com.ibm.msg.client.jms.JmsFactoryFactory;
import com.ibm.msg.client.wmq.WMQConstants;
import com.prowidesoftware.swift.io.RJEReader;
import com.prowidesoftware.swift.model.SwiftMessage;
public class FileScanner {
private static final Logger logger = Logger.getLogger("RJEFileParser");
@Test
public void testPublish() throws Exception {
int count=0;
long m1,m2;
// Create a connection factory
JmsFactoryFactory ff = JmsFactoryFactory.getInstance(WMQConstants.WMQ_PROVIDER);
JmsConnectionFactory cf = ff.createConnectionFactory();
// Set the properties
String s;
s=Config.get("HOST"); // 10.32.1.69
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, s);
s=Config.get("PORT"); // 1414
cf.setIntProperty(WMQConstants.WMQ_PORT, Integer.parseInt(s));
s=Config.get("CHANNEL"); // MQCLI.CLNTCONN
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, s);
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
s=Config.get("QMGR"); // RJE_PerfTest
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, s);
cf.setStringProperty(WMQConstants.WMQ_APPLICATIONNAME, "mq-cli");
cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, true);
s=Config.get("APP_USER"); // app
cf.setStringProperty(WMQConstants.USERID, s);
s=Config.get("APP_PASSWORD"); // password
cf.setStringProperty(WMQConstants.PASSWORD, s);
// Create JMS objects
try {
JMSContext context = cf.createContext(); // Throws exception
...
} catch (FileNotFoundException e) {
e.printStackTrace();
Assert.fail(e.getMessage());
} catch (IOException e) {
e.printStackTrace();
Assert.fail(e.getMessage());
} catch (Exception e) {
e.printStackTrace();
Assert.fail(e.getMessage());
}
}
}
引发的异常为:
com.ibm.msg.client.jms.DetailedJMSRuntimeException:JMSWMQ0018:失败
使用连接模式连接到队列管理器“RJE_PerfTest”
“客户端”和主机名“10.32.1.691414”。检查队列管理器是否正确
已启动,如果在客户端模式下运行,请检查是否存在侦听器
跑步有关详细信息,请参阅链接的异常。在
com.ibm.msg.client.jms.DetailedJMSException.getUncheckedDetailedJMSException.java:267
在
com.ibm.msg.client.jms.internal.JmsErrorUtils.convertjmsceceptionjmserrorutils.java:173
在
com.ibm.msg.client.jms.admin.jmsconnectionfactorympl.createContextjmsconnectionfactorympl.java:478
在
com.mycompany.mq.client.FileScanner.testPublishFileScanner.java:61
在sun.reflect.NativeMethodAccessorImpl.invoke0Native方法在
sun.reflect.NativeMethodAccessorImpl.invokeNativeMethodAccessorImpl.java:62
在
sun.reflect.DelegatingMethodAccessorImpl.invokeDelegatingMethodAccessorImpl.java:43
java:498 at
org.junit.runners.model.FrameworkMethod$1.runReflectVeCallFrameworkMethod.java:50
在
org.junit.internal.runners.model.ReflectiveCallable.runReflectiveCallable.java:12
在
org.junit.runners.model.FrameworkMethod.invokeeexplosivelyframeworkmethod.java:47
在
org.junit.internal.runners.statements.InvokeMethod.evaluateInvokeMethod.java:17
位于org.junit.runners.ParentRunner.runLeafParentRunner.java:325处
org.junit.runners.BlockJUnit4ClassRunner.runChildBlockJUnit4ClassRunner.java:78
在
org.junit.runners.BlockJUnit4ClassRunner.runChildBlockJUnit4ClassRunner.java:57
位于org.junit.runners.ParentRunner$3.runParentRunner.java:290处
org.junit.runners.ParentRunner$1.scheduleParentRunner.java:71 at
org.junit.runners.ParentRunner.runChildrenParentRunner.java:288 at
org.junit.runners.ParentRunner.access$000ParentRunner.java:58
org.junit.runners.ParentRunner$2.evaluateParentRunner.java:268
org.junit.runners.ParentRunner.runParentRunner.java:363
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.runJUnit4TestReference.java:89
在
org.eclipse.jdt.internal.junit.runner.TestExecution.runTestExecution.java:41
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTestsRemoteTestRunner.java:541
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTestsRemoteTestRunner.java:763
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runRemoteTestRunner.java:463
在
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.mainRemoteTestRunner.java:209
由以下原因引起:com.ibm.mq.MQException:JMSCMQ0001:ibm mq调用失败
compcode“2”MQCC_失败“原因”2540
“MQRC_未知_通道名称”。在
com.ibm.msg.client.wmq.common.internal.Reason.createExceptionReason.java:203
在
com.ibm.msg.client.wmq.internal.WMQConnection.WMQConnection.java:424
在
com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnectionWMQConnectionFactory.java:8475
在
com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnectionWMQConnectionFactory.java:7815
在
com.ibm.msg.client.jms.admin.jmsconnectionfactorympl.\u createConnectionjmsconnectionfactorympl.java:303
在
com.ibm.msg.client.jms.admin.jmsconnectionfactorympl.createContextjmsconnectionfactorympl.java:444
... 由com.ibm.mq.jmqi.jmqi异常引起的24个以上异常:
CC=2;RC=2540;AMQ9204:与主机“10.32.1.691414”的连接被拒绝。
[1=com.ibm.mq.jmqi.JmqiException[CC=2;RC=2540;AMQ9520:通道不可用
远程定义。
[3=MQCLI.CLNTCONN]],3=10.32.1.691414,5=RemoteConnection.analyseErrorSegment]
在
com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnectRemoteFAP.java:2314
在
com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnectRemoteFAP.java:1285
在
com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiConnectInterceptedJmqiImpl.java:377
com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnectESEJMQI.java:562 at
com.ibm.msg.client.wmq.internal.WMQConnection.WMQConnection.java:357
... 28更多原因:com.ibm.mq.jmqi.jmqi异常:
CC=2;RC=2540;AMQ9520:未远程定义通道。[3=MQCLI.CLNTCONN]
在
com.ibm.mq.jmqi.remote.impl.RemoteConnection.analyseErrorSegmentRemoteConnection.java:4464
在
com.ibm.mq.jmqi.remote.impl.RemoteConnection.receiveTSHRemoteConnection.java:3199
在
com.ibm.mq.jmqi.remote.impl.RemoteConnection.initSessRemoteConnection.java:1274
在
com.ibm.mq.jmqi.remote.impl.RemoteConnection.connectRemoteConnection.java:895
在
com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSessionFromNewConnectionRemoteConnectionSpecification.java:416
在
com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSessionRemoteConnectionSpecification.java:
312
在
com.ibm.mq.jmqi.remote.impl.RemoteConnectionPool.getSessionRemoteConnectionPool.java:146
在
com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnectRemoteFAP.java:1761
... 32多
将队列管理器配置为
DIS QMGR
2 : DIS QMGR
AMQ8408: Display Queue Manager details.
QMNAME(RJE_PerfTest) ACCTCONO(DISABLED)
ACCTINT(1800) ACCTMQI(OFF)
ACCTQ(OFF) ACTIVREC(MSG)
ACTVCONO(DISABLED) ACTVTRC(OFF)
ALTDATE(2020-03-04) ALTTIME(15.48.24)
AUTHOREV(DISABLED) CCSID(437)
CERTLABL(ibmwebspheremqrje_perftest) CERTVPOL(ANY)
CHAD(DISABLED) CHADEV(DISABLED)
CHADEXIT( ) CHLEV(DISABLED)
CHLAUTH(ENABLED) CLWLDATA( )
CLWLEXIT( ) CLWLLEN(100)
CLWLMRUC(999999999) CLWLUSEQ(LOCAL)
CMDEV(DISABLED) CMDLEVEL(800)
COMMANDQ(SYSTEM.ADMIN.COMMAND.QUEUE) CONFIGEV(DISABLED)
CONNAUTH(SYSTEM.DEFAULT.AUTHINFO.IDPWOS)
CRDATE(2020-02-20) CRTIME(16.25.00)
CUSTOM( ) DEADQ( )
DEFCLXQ(SCTQ) DEFXMITQ( )
DESCR( ) DISTL(YES)
INHIBTEV(DISABLED) IPADDRV(IPV4)
LOCALEV(DISABLED) LOGGEREV(DISABLED)
MARKINT(5000) MAXHANDS(256)
MAXMSGL(104857600) MAXPROPL(NOLIMIT)
MAXPRTY(9) MAXUMSGS(10000)
MONACLS(QMGR) MONCHL(OFF)
MONQ(OFF) PARENT( )
PERFMEV(DISABLED) PLATFORM(WINDOWSNT)
PSMODE(ENABLED) PSCLUS(ENABLED)
PSNPMSG(DISCARD) PSNPRES(NORMAL)
PSRTYCNT(5) PSSYNCPT(IFPER)
QMID(RJE_PerfTest_2020-02-20_16.25.00)
REMOTEEV(DISABLED) REPOS( )
REPOSNL( ) REVDNS(ENABLED)
ROUTEREC(MSG) SCHINIT(QMGR)
SCMDSERV(QMGR) SPLCAP(DISABLED)
SSLCRLNL( ) SSLCRYP( )
SSLEV(DISABLED) SSLFIPS(NO)
SSLKEYR(C:\ProgramData\IBM\MQ\qmgrs\RJE_PerfTest\ssl\key)
SSLRKEYC(0) STATACLS(QMGR)
STATCHL(OFF) STATINT(1800)
STATMQI(OFF) STATQ(OFF)
STRSTPEV(ENABLED) SUITEB(NONE)
SYNCPT TREELIFE(1800)
TRIGINT(999999999) VERSION(08000005)
XRCAP(NO)
连接工作正常
如何解决这个问题
提前感谢。此错误源于频道类型之间的基本混淆 服务器中配置的客户端连接通道用于其他用途,如本论坛所述: 当您说您在队列管理器上创建了“客户端连接”时, 你是说你创建了一个CLNTCONN类型的频道吗?这需要改进 键入SVRCONN以允许客户端连接。CLNTCONN通道永远不可用 使用dby QMgrs-它们仅用于为创建通道表 客户 客户端连接需要一个服务器连接通道,如此处所述创建> 现在我的频道看起来:
DIS CHANNEL ('SWFMQ.CHANNEL')
8 : DIS CHANNEL ('SWFMQ.CHANNEL')
AMQ8414: Display Channel details.
CHANNEL(SWFMQ.CHANNEL) CHLTYPE(SVRCONN)
ALTDATE(2020-03-06) ALTTIME(13.09.41)
CERTLABL( ) COMPHDR(NONE)
COMPMSG(NONE) DESCR( )
DISCINT(0) HBINT(300)
KAINT(AUTO) MAXINST(999999999)
MAXINSTC(999999999) MAXMSGL(4194304)
MCAUSER( ) MONCHL(QMGR)
RCVDATA( ) RCVEXIT( )
SCYDATA( ) SCYEXIT( )
SENDDATA( ) SENDEXIT( )
SHARECNV(10) SSLCAUTH(REQUIRED)
SSLCIPH( ) SSLPEER( )
TRPTYPE(TCP)
DEFINE CHANNEL(SWFMQ.CHANNEL) CHLTYPE(SVRCONN) TRPTYPE(TCP)
7 : DEFINE CHANNEL(SWFMQ.CHANNEL) CHLTYPE(SVRCONN) TRPTYPE(TCP)
AMQ8014: WebSphere MQ channel created.
DIS CHANNEL ('SWFMQ.CHANNEL')
8 : DIS CHANNEL ('SWFMQ.CHANNEL')
AMQ8414: Display Channel details.
CHANNEL(SWFMQ.CHANNEL) CHLTYPE(SVRCONN)
ALTDATE(2020-03-06) ALTTIME(13.09.41)
CERTLABL( ) COMPHDR(NONE)
COMPMSG(NONE) DESCR( )
DISCINT(0) HBINT(300)
KAINT(AUTO) MAXINST(999999999)
MAXINSTC(999999999) MAXMSGL(4194304)
MCAUSER( ) MONCHL(QMGR)
RCVDATA( ) RCVEXIT( )
SCYDATA( ) SCYEXIT( )
SENDDATA( ) SENDEXIT( )
SHARECNV(10) SSLCAUTH(REQUIRED)
SSLCIPH( ) SSLPEER( )
TRPTYPE(TCP)