我正在寻找关于如何设置一个应用程序来侦听多个队列管理器上的集群队列的一些指导。下面是我们当前的设置:
物理盒"Alpha":为端口定义的TCP侦听器: 1111队列管理器名称: QM1通道名称:"MyChannel“队列名: Q1
物理盒"Beta":为端口1112队列管理器名称定义的TCP侦听器: QM2通道名称:"MyChannel“队列名: 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;
}发布于 2014-08-07 02:01:05
应用程序必须在本地连接才能获得消息。此处的locally意味着“应用程序可以从托管在应用程序直接连接的队列管理器中的队列中获取消息”。当运行Beta框的第二个应用程序连接到驻留Q1的队列管理器QM2时,它将接收消息。
您可以在Alpha框上运行第二个应用程序的另一个实例,其中应用程序连接到QM1以从Q1获取消息。
更新
请注意,MQ群集用于在集群中队列管理器中的多个集群队列实例之间加载平衡消息。MQ群集与高可用性群集不一样。在MQ集群中,消息将以循环方式分发到队列的所有实例(循环分发是默认的)。可以通过开发集群工作负载退出将其更改为。
由于任务是负载平衡消息,因此必须设置每个集群队列实例一个应用程序来处理消息。如果没有这样的设置,那么消息将保留在集群队列实例中。
https://stackoverflow.com/questions/25170484
复制相似问题