IBM MQ失败,原因为'2278'('MQRC_CLIENT_CONN_ERROR')

时间:2018-05-23 17:17:16

标签: java jms ibm-mq

我一直试图通过CCDT文件获取Java应用程序连接到IBM MQ v8,但没有运气。使用属性(主机名,端口等)进行连接时,我可以正常连接,但使用CCDT,我一直得到 WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2278' ('MQRC_CLIENT_CONN_ERROR').

我正在使用MQ Developer 8.0的vanilla安装(需要版本,无法更改)和安装中的Jars。我所做的只是安装MQ,然后设置QueueManager'QM1',然后创建一个队列'Q1'。

我的代码:

    package mqtest;

    import com.ibm.mq.jms.*;
    import java.io.File;
    import java.net.URL;

    public class Main {

    public static void main(String[] args) {
        try {
            MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
            File file = new File("C:/ProgramData/IBM/MQ/qmgrs/QM1/@ipcc/AMQCLCHL.TAB");
            URL clientChannelTableUrl = file.toURI().toURL();

            cf.setQueueManager("QM1");
            cf.setCCDTURL(clientChannelTableUrl);

            MQQueueConnection mqQueueConnection = (MQQueueConnection) cf.createConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

dis qmgr

AMQ8408: Display Queue Manager details.
   QMNAME(QM1)                             ACCTCONO(DISABLED)
   ACCTINT(1800)                           ACCTMQI(OFF)
   ACCTQ(OFF)                              ACTIVREC(MSG)
   ACTVCONO(DISABLED)                      ACTVTRC(OFF)
   ALTDATE(2018-05-23)                     ALTTIME(10.21.26)
   AUTHOREV(DISABLED)                      CCSID(437)
   CERTLABL(ibmwebspheremqqm1)             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(2018-05-23)                      CRTIME(10.21.26)
   CUSTOM( )                               DEADQ( )
   DEFCLXQ(SCTQ)                           DEFXMITQ( )
   DESCR( )                                DISTL(YES)
   INHIBTEV(DISABLED)                      IPADDRV(IPV4)
   LOCALEV(DISABLED)                       LOGGEREV(DISABLED)
   MARKINT(5000)                           MAXHANDS(256)
   MAXMSGL(4194304)                        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(QM1_2018-05-23_10.21.26)           REMOTEEV(DISABLED)
   REPOS( )                                REPOSNL( )
   REVDNS(ENABLED)                         ROUTEREC(MSG)
   SCHINIT(QMGR)                           SCMDSERV(QMGR)
   SPLCAP(ENABLED)                         SSLCRLNL( )
   SSLCRYP( )                              SSLEV(DISABLED)
   SSLFIPS(NO)
   SSLKEYR(C:\ProgramData\IBM\MQ\qmgrs\QM1\ssl\key)
   SSLRKEYC(0)                             STATACLS(QMGR)
   STATCHL(OFF)                            STATINT(1800)

C:\ ProgramData \ IBM \ MQ \ qmgrs \ QM1 \ errors中的错误日志中没有相关的(我至少可以看到)数据。

据我所知,IBM,Google搜索此应该的工作。据我所知,它与频道定义或设置有关,但我只是不知道是什么。

老实说,我认为我已经花了足够的脑细胞,我很可能忽略了一些重要但无法看到我忽略的小细节。任何帮助,如赞赏。

1 个答案:

答案 0 :(得分:0)

MQ版本:9.0.0.4

步骤1:仅需要一个jar:com.ibm.mq.allclient-9.0.4.0.jar

步骤2: 不要在MQEnvironment中设置任何变量

第3步:

java.net.URL chanTab1 = new URL("file:///C:/MGR.TAB");          
MQQueueManager _queueManager = new MQQueueManager("*", chanTab1);
int openOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;
MQQueue queue = _queueManager.accessQueue( "QNAME", openOptions,null,null, null );

MQMessage sendmsg = new MQMessage();

*将允许您连接.TAB文件中所有可用的QManager。

第4步: 通过命令在您的jre C:\Program Files\Java\jdk1.7\jre\bin中安装证书

keytool -import -alias example -keystore  ..\lib\security\cacerts -file C:\test.cer

默认密码为changeit。大多数情况下,没有人会改变这一点。 :-)

如果您在Websphere应用程序服务器上部署了代码,则无需在服务器JRE中安装证书。 Websphere服务器上的插入安装证书 SSL证书和密钥管理>密钥库和证书> NodeDefaultKeyStore>签名者证书>从端口检索