IBM MQ Create Context выбрасывает com.ibm.mq.jmqi.JmqiException «Канал не определен удаленно» (R C 2540) - PullRequest
0 голосов
/ 06 марта 2020

При попытке создать контекст, этот код выдает исключение ниже:

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.69 (1414)». Проверьте, запущен ли администратор очередей, и, если он работает в режиме клиента, проверьте, работает ли прослушиватель. Пожалуйста, смотрите связанное исключение для получения дополнительной информации. в com.ibm.msg.client.jms.DetailedJMSException.getUnchecked (ПодробностиJMSException. java: 267) в com.ibm.msg.client.jms.internal.JmsErrorUtils.convertJMSException (JmsErrorUtils. java: 173 в com) .ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createContext (JmsConnectionFactoryImpl. java: 478) на com.mycompany.mq.client.FileScanner.testPubli sh (FileScanner. java: 61). refle.NativeMethodAccessorImpl.invoke0 (нативный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl. java: 62) в sun.reflect.DelegatingMethodAccessorIccessl.invoke * * * 10 *. refle.Method.invoke (Method. java: 498) в org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod. java: 50) в org.junit.internal.runners.model.ReflectiveCallabler. (ReflectiveCallable. java: 12) в org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod. java: 47) в org.junit.internal.runners.statements.InvokeMethod.evaluate (Inv okeMethod. java: 17) в org.junit.runners.ParentRunner.runLeaf (ParentRunner. java: 325) в org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.) 78 at. 1033 .runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner. java: 57) в org.junit.runners.ParentRunner $ 3.run (ParentRunner. java: 290) в org.junit.runners.ParentRunner $ ParentRunner $ 1036 *: 71) в org.junit.runners.ParentRunner.runChildren (ParentRunner. java: 288) в org.junit.runners.ParentRunner.access $ 000 (ParentRunner. java: 58) в org.junit.runners .ParentRunner $ 2.evaluate (ParentRunner. java: 268) в org.junit.runners.ParentRunner.run (ParentRunner. java: 363) в org.eclipse.jdt.internal.junit4.runner.JUnit4TestReferencer. JUnit4TestReference. java: 89) в org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution. java: 41) в org.eclipse.jdt.internal.junit.runner.RemoteTestTunTr RemoteTestRunner. java: 541) в org.eclipse.jdt.internal.junit.runner.RemoteTestRun ner.runTests (RemoteTestRunner. java: 763) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner. java: 463) в org.eclipse.jdt.internal.junit.un RemoteTestRunner.main (RemoteTestRunner. java: 209) Вызвано: com.ibm.mq.MQException: JMSCMQ0001: сбой вызова IBM MQ с кодом 2 '(' MQCC_FAILED '), причина' 2540 '(' MQRC_UNKNOWN_CHANNEL_NAME '). на com.ibm.msg.client.wmq.common.internal.Reason.createException (Reason. java: 203) на com.ibm.msg.client.wmq.internal.WMQConnection. (WMQConnection. java: 424 . . ) ... еще 24 Причина: com.ibm.mq.jmqi.JmqiException: CC = 2; RC = 2540; AMQ9204: Соединение с хостом '10 .32.1.69 (1414)' отклонено. [1 = com.ibm.mq.jmqi.JmqiException [CC = 2; RC = 2540; AMQ9520: канал не определен удаленно. [3 = MQCLI.CLNTCONN]], 3 = 10.32.1.69 (1414), 5 = RemoteConnection.analyseErrorSegment] на com.ibm.mq.jmqi.remote.api. RemoteFAP.jmqiConnect (RemoteFAP. java: 2314) по адресу com.ibm.mq.jmqi.remote.api.RemoteFAP.jmqiConnect (RemoteFAP. java: 1285) по адресу com.ibm.mq.ese.jmqi.InterceptedJmqiImpl. jmqiConnect (InterceptedJmqiImpl. java: 377) на com.ibm.mq.ese.jmqi.ESEJMQI.jmqiConnect (ESEJMQI. java: 562) на com.ibm.msg.client.wmq.internal.WMQConnection. . java: 357) ... еще 28 Причина: com.ibm.mq.jmqi.JmqiException: CC = 2; RC = 2540; AMQ9520: Канал не определен удаленно. [3 = MQCLI.CLNTCONN] в com.ibm.mq.jmqi.remote.impl.RemoteConnection.analyseErrorSegment (RemoteConnection. java: 4464) в com.ibm.mq.jmqi.remote.impl.RemoteConnection.receiveT SH (RemoteConnection. java: 3199) по адресу com.ibm.mq.jmqi.remote.impl.RemoteConnection.initSess (RemoteConnection. java: 1274) по адресу com.ibm.mq.jmqi.remote.impl.RemoteConnection. connect (RemoteConnection. java: 895) по адресу com.ibm.mq.jmqi.remote.impl.RemoteConnectionSpecification.getSessionFromNewConnection (RemoteConnectionSpecification. java: 416) по адресу com.ibm.mq.jmqi.remote.impl.RemoteConnection. getSession (RemoteConnectionSpecification. java: 312) по адресу com.ibm.mq.jmqi.remote.impl.RemoteConnectionPool.getSession (RemoteConnectionPool. java: 146) по адресу com.ibm.mq.jmqi.remote.api.RemoteFAP. jmqiConnect (RemoteFAP. java: 1761) ... еще 32

DIS CHANNEL ('MQCLI.CLNTCONN')
     3 : DIS CHANNEL ('MQCLI.CLNTCONN')
AMQ8414: Display Channel details.
   CHANNEL(MQCLI.CLNTCONN)                 CHLTYPE(CLNTCONN)
   AFFINITY(PREFERRED)                     ALTDATE(2020-03-06)
   ALTTIME(11.34.36)                       CERTLABL( )
   CLNTWGHT(0)                             COMPHDR(NONE)
   COMPMSG(NONE)                           CONNAME(10.32.1.69)
   DEFRECON(NO)                            DESCR( )
   HBINT(300)                              KAINT(AUTO)
   LOCLADDR( )                             MAXMSGL(4194304)
   MODENAME( )                             PASSWORD( )
   QMNAME(RJE_PerfTest)                    RCVDATA( )
   RCVEXIT( )                              SCYDATA( )
   SCYEXIT( )                              SENDDATA( )
   SENDEXIT( )                             SHARECNV(10)
   SSLCIPH( )                              SSLPEER( )
   TPNAME( )                               TRPTYPE(TCP)
   USERID( )

С диспетчером очереди, настроенным как

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)

Связь работает нормально.

Как решить эту проблему?

Заранее спасибо. * 1 018 *

1 Ответ

1 голос
/ 06 марта 2020

Эта ошибка возникает из-за базовой c путаницы между типами каналов.

Канал подключения клиента, настроенный на сервере, предназначен для чего-то другого, как указано на этом форуме: https://www.tek-tips.com/viewthread.cfm?qid=248122

"Когда вы говорите, что создали 'Client Connection' в Queue Manager, вы имеете в виду, что вы создали канал с типом CLNTCONN? Это должен быть тип SVRCONN, чтобы разрешить клиентские подключения Каналы CLNTCONN никогда не используют dby QMgrs - они существуют только для создания таблиц каналов для клиентов. "

Для клиентского соединения требуется канал подключения к серверу, созданный, как описано здесь>

https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q031730_.htm

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)
...