连接到队列管理器JMS时的MQ错误代码2058

时间:2016-11-17 04:46:51

标签: queue jms ibm-mq

我正在尝试使用MQ api连接到队列管理器,并且我能够连接到队列管理器

MQQueueManager queueManager=new MQQueueManager(qmgrName);
queueManager.accessQueue(qName,MQOO_OUTPUT);

但是当我尝试使用JMS连接到同一个队列管理器时,它失败了2058代码。不确定我是否遗漏了JMS的内容

    MQQueueConnectionFactory qcf=new MQQueueConnectionFactory();
    qcf.setQueueManager(qmgrName);
    qcf.setPort(1414);
    qcf.setHostname("localhost");
    qcf.createQueueConnection();

3 个答案:

答案 0 :(得分:1)

如文档here所述,MQRC 2058表示无效的队列管理器名称或队列管理器名称未知。但正如您所提到的,使用MQ Base Java的绑定模式连接成功,队列管理器名称显示为有效。

<强>更新

抱歉,我的代码误导了您,并认为您正在尝试使用JMS进行客户端模式连接。您不需要为绑定模式连接设置主机和端口。

由于未设置传输类型,因此使用默认值WMQ_CM_BINDINGS。建议您验证队列管理器名称。

答案 1 :(得分:1)

要与&#34; BINDINGS&#34;连接,队列管理器需要是本地的。您是否尝试连接到远程队列管理器?如果是这样,您需要连接为&#34;客户端&#34;。另外,请检查以确保qmgr正在侦听您指定的端口。

答案 2 :(得分:1)

本地主机上有两个或更多队列管理器。在第一个示例中,您将以绑定模式进行连接,以便按名称选择队列管理器,并获得正确的队列管理器。在第二个示例中,连接是通过客户端连接进行的,因此由1414上的QMgr监听接收,而不是您想要的连接被拒绝。

请注意,如果两个QMgrs在1414上都有一个侦听器,则连接将成功或失败,具体取决于首先启动的QMgr。只有一个可以绑定到该端口,因此第一个启动它可以使用它。这可能会导致行为不一致。

请参阅Connection modes for IBM MQ classes for JMS,其中建议“要更改IBM MQ类用于JMS的连接选项,请修改连接工厂属性CONNOPT。”页面上提供了可接受的值,但您几乎总是希望它为标准绑定(MQCNO_STANDARD_BINDING)设置。

相关问题