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)