连接到单个Websphere MQ失败的多个Websphere应用程序服务器

时间:2013-10-02 19:04:04

标签: websphere ibm-mq

问题: 将多个使用者应用程序活动规范附加到分布式VM服务器上的单个MQ会导致MQ消息中出现空有效负载。 注意:请参阅底部的注释。没有问题mq。

详细信息: 我在2个VM服务器上部署了3个Websphere应用程序。 1个应用程序是发布者,其他2个应用程序是附加到单个MQ Manager和MQ的使用者。 2个消费者应用程序正在关闭消息并处理它们。单独服务器上的使用者应用程序接收空有效负载。我已经确认它似乎是一个连接到MQ的多个应用程序服务器实例的问题。通过在服务器2上使用消费者2部署发布者来确认,然后消费者1失败。

问题: 有没有人尝试将部署在不同服务器实例上的多个MDB应用程序绑定到一个队列管理器和一个MQ?

规格:

Websphere 7,EJB 3.0 MDB,交易已关闭,队列安装在另一台机器上。

目标:

分布式计算,扩展到大量消息。

我认为这是一个配置问题,但不是100%确定在哪里查看。我读过你可以使用MQLink,但我不明白为什么我需要使用服务总线集成。

支持Doucmentation: [MQ Link] [1

更新:我修复了问题,它与类加载器问题和重复类的组合有关。请参阅我添加的解决方案说明。

编辑历史: - 澄清规范,澄清问题并增加总体目标。 - 参考解决方案说明。

2 个答案:

答案 0 :(得分:1)

  

是否有人尝试附加部署的多个MDB应用程序   单独的服务器实例绑定到一个本地MQ?

多个MDB应用程序部署在不同的服务器上,连接到一个队列管理器(但不同的队列)是正常情况,我们随处可见,所有应用程序都能正常运行。

但是,我怀疑你在做什么:多个MDB应用程序部署在不同的服务器上,连接到一个队列管理器,监听同一个队列

在这种情况下,仅一个消费者将收到一条消息。

您需要为每个应用程序创建单独的队列,并为发布者发布的主题为每个应用程序创建订阅。

  

<强>增加:

我怀疑,对于负载平衡,您可能遇到的问题是,当您的第一个应用程序获取消息时,它不会发出提交。因此,队列中将存在未提交的消息,这可能会阻止您的其他应用程序从队列中获取消息。当您的第一个应用程序完成其处理时,它会发出提交,但随后它又准备好选择消息,因此它会再次发出一个get。

在我的架构中,我们使用多个队列管理器实现了负载平衡,如下所示:

您可以创建3个队列管理器,例如 GatewayQM App1QM App2QM

将三个队列管理器保持在同一个群集中。

GatewayQM 中创建别名队列(在群集中共享),并要求您的推送应用将消息放入网关队列。

现在在App1QM和App2QM中创建一个本地群集队列。分别通过应用程序App1和App2从这些队列中读取。

此实施为您提供更好的安全性,并提供完美的负载均衡器。

答案 1 :(得分:0)

此特定问题是由代码问题以及在Websphere控制台中将类加载设置为“Parent First”引起的。在一个节点上它可以工作,集群中的其他节点会失败,我认为这是由“父亲优先”设置引起的。

更重要的是,就我在群集中的配置而言,将多个活动规范绑定到单个MQ以提供分布式计算是正确的解决方案。

然而,如果您正在寻找极高容量的解决方案,那么“点”应归于上述“nitgeek”解决方案。重要的是要理解单个MQ可以具有非常高的深度并且需要很多才能充分利用它。我目前的配置是使用Multiple MDB进行快速配置和分布式处理的良好起点。