我正在尝试使用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();
答案 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
)设置。