【发布时间】:2014-08-07 21:53:13
【问题描述】:
我正在寻找有关如何设置应用程序来侦听多个队列管理器上的集群队列的一些指导。以下是我们当前的设置:
物理盒子“Alpha”: 为端口定义的 TCP 侦听器:1111 队列管理器名称:QM1 频道名称:“我的频道” 队列名称:Q1
物理盒“测试版”: 为端口 1112 定义的 TCP 侦听器 队列管理器名称:QM2 频道名称:“我的频道” 队列名称:Q1
外部客户端应用程序在端口 1111 上连接到物理框 Alpha 上的 QM1。
当我将消息放到 Q1 上时,由于集群设置,每隔一秒的消息就会放在 QM1 上的 Q1 或 QM2 上的 Q1 上。
当另一个应用程序在端口 1112 上连接到物理机 Beta 上的 QM2 时,它只接收已发送到 Q1 的消息的一半,因为它没有监控两个队列管理器。
有没有办法连接到两个队列管理器,以便我的第二个应用程序接收放置在 Q1 上的所有消息,而不管它正在监视的队列管理器是什么?
我们使用以下代码通过 JMS 进行连接:
public static ConnectionFactory createConnectionFactory(final ConnectionString connectionString) throws JMSException {
MQConnectionFactory cf = new MQConnectionFactory();
cf.setHostName(connectionString.getHost());
cf.setPort(connectionString.getPort());
cf.setTransportType(WMQConstants.WMQ_CM_CLIENT);
cf.setClientReconnectOptions(WMQConstants.WMQ_CLIENT_RECONNECT_Q_MGR);
cf.setQueueManager(connectionString.getQueueManager());
cf.setChannel(connectionString.getChannel());
return cf;
}
【问题讨论】:
-
这里与 WMQ 集群有些混淆。定义 WMQ 集群时,需要为每个队列管理器定义一个 CLUSRCVR 和一个 CLUSSDR。传输队列 SYSTEM.CLUSTER.TRANSMIT.QUEUE 将被自动创建。您的应用程序不可能只收到一半的消息。您是否在真实配置中进行过测试?
-
@COLINHY:我们已经在真实配置中进行了测试,两个盒子上都定义了 CLUSRCVR 和 CLUSSDR 通道,它们相互指向。您是说连接到 QM1 或 QM2 的应用程序应该接收发送到 Q1 的所有消息吗?这是否意味着消息在 QM1 和 QM2 上的队列 Q1 中复制?