gpt4 book ai didi

java - 从 WebSphere MQ 中的集群队列接收消息

转载 作者:行者123 更新时间:2023-11-30 08:21:30 25 4
gpt4 key购买 nike

我正在寻找有关如何设置一个应用程序以监听多个队列管理器上的集群队列的指导。以下是我们当前的设置:

物理盒子“Alpha”:为端口定义的 TCP 监听器:1111队列管理器名称:QM1 channel 名称:“我的 channel ”队列名称:Q1

实体盒子“测试版”:为端口 1112 定义的 TCP 监听器队列管理器名称:QM2 channel 名称:“我的 channel ”队列名称: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;
}

最佳答案

应用程序必须在本地连接到 GET 消息。 locally 这里的意思是“应用程序可以从托管在应用程序直接连接到的队列管理器中的队列中获取消息”。当运行 Beta 框的第二个应用程序连接到托管 Q1 的队列管理器 QM2 时,它正在接收消息。

您可以在 Alpha box 上运行第二个应用程序的另一个实例,应用程序连接到 QM1 以从 Q1 获取消息。

更新

请注意 MQ 集群用于在集群中的队列管理器中的多个集群队列实例之间平衡消息的工作负载。 MQ 集群与高可用性集群不同。在MQ集群中,消息会以round robin的方式分发给一个queue的所有实例(round robin分发是默认的,可以通过开发集群workload exit更改为)。

由于这项工作是对消息进行负载平衡,因此必须为每个集群队列实例设置一个应用程序来处理消息。如果没有进行这样的设置,那么消息将保留在集群队列实例中。

关于java - 从 WebSphere MQ 中的集群队列接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25170484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com