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

标签 java jms ibm-mq

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

物理盒子“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 消息。这里的本地表示“应用程序可以从托管在应用程序直接连接的队列管理器中的队列获取消息”。当运行 Beta 框的第二个应用程序连接到托管 Q1 的队列管理器 QM2 时,它正在获取消息。

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

更新

请注意,MQ 集群用于在集群中的队列管理器中的多个集群队列实例之间负载均衡消息。 MQ 集群与高可用性集群不同。在MQ集群中,消息将以循环方式分发到队列的所有实例(循环分发是默认的。可以通过开发集群工作负载导出来更改)。

由于该作业是对消息进行负载平衡,因此必须为每个集群队列实例设置一个应用程序来处理消息。如果未进行此类设置,则消息将保留在集群队列实例中。

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

相关文章:

java - MessageConsumer 不消费消息

binding - IBM MQ : Multiple QMs in JMS bindings file

java - 如何为 Websphere MQ 客户端启用带有客户端证书的 SSL?

java - (SPRING) 从 postgresql 数据库获取用户信息并在 thymeleaf html 中打印

java - Spring MVC 应用程序的默认资源文件夹

Java扩展类类型

java - 使用 JMS 和 Spring 进行测试

java - 编辑条目后 ListView 滚动到顶部

java应用程序架构数据交换

java - 在不指定队列管理器名称的情况下连接到队列