【问题标题】:MQ error code 2058 when connecting to queue manager JMS连接到队列管理器 JMS 时出现 MQ 错误代码 2058
【发布时间】:2017-03-31 12:34:45
【问题描述】:

我正在尝试使用 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();

【问题讨论】:

    标签: queue jms ibm-mq


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      要连接“BINDINGS”,队列管理器必须是本地的。您是否尝试连接到远程队列管理器?如果是这样,您需要以“客户”身份连接。此外,请检查以确保 qmgr 正在侦听您指定的端口。

      【讨论】:

        【解决方案3】:

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

        更新:

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

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

        【讨论】:

        • 我正在尝试仅在 JMS 中使用绑定模式进行连接。但它仍然失败
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-23
        • 1970-01-01
        • 1970-01-01
        • 2017-12-18
        相关资源
        最近更新 更多