【发布时间】:2017-03-29 08:37:37
【问题描述】:
在设置MQQueueConnectionFactory 时,我们将其初始化如下:
MQQueueConnectionFactory factory = new MQQueueConnectionFactory();
factory.setQueueManager(queueManager);
factory.setTransportType(CommonConstants.WMQ_CM_CLIENT);
factory.setHostName(host);
factory.setPort(port);
factory.setChannel(channel);
特别是我们设置了队列管理器的名称。从这个模式看来,队列管理器名称对于完全识别队列管理器是必要的。人们可能会得出结论,在同一主机和端口上,可能会有不同的队列管理器进行侦听。这可能吗?
但是,当设置 the connection name list 以指定重新连接目标时,不需要队列管理器名称:
public void setConnectionNameList(java.lang.String hosts) throws javax.jms.JMSException指定客户端在连接断开后将尝试重新连接的主机。连接名称列表是以逗号分隔的主机/IP 端口对列表。例如。 127.0.0.1(1414),host2.example.com(1400) 这个属性的默认设置是'localhost(1414)' 一个null,或者空字符串被认为是localhost(1414)
在设置client reconnect options 时,在这种情况下,两个选项似乎很重要:
- WMQ_CLIENT_RECONNECT - 重新连接到连接名称列表中指定的任何队列管理器
- WMQ_CLIENT_RECONNECT_Q_MGR - 重新连接到我们最初连接的同一个队列管理器。如果它尝试连接的队列管理器(在连接名称列表中指定)与最初连接的队列管理器具有不同的 QMID,这将抛出 MQRC_RECONNECT_QMID_MISMATCH。
这些文档不清楚是否可以在同一主机/端口后面使用多个队列管理器。将此与 Oracle 相比,其中多个服务可以由同一个侦听器提供服务。
我们有两个队列管理器在不同名称的不同主机/端口上进行侦听。我们希望将这些队列管理器之一用作连接名称列表中的故障转移管理器。问题是:队列管理器是否仅由主机和端口唯一标识?
【问题讨论】:
-
感谢您的投票并接受。请注意稍后使用指向相关文档链接的指针进行的更新。 CCDT 组主要是通用 QMgr 名称所需要的,因此即使不使用也很容易理解。