0

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

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

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

规格:

Websphere 7,EJB 3.0 MDB,事务已关闭,队列在安装在另一台机器上的队列中。

目标:

分布式计算,针对大量消息进行扩展。

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

支持文档: [MQ 链接][1

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

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

4

2 回答 2

1

有没有人尝试将部署在不同服务器实例上的多个 MDB 应用程序绑定到一个本地 MQ?

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

但是,我怀疑您正在做的是:多个 MDB 应用程序部署在不同的服务器上,连接到一个 Queue Manager 并监听同一个 queue

在这种情况下,只有一个消费者会收到一条消息。

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

添加:

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

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

您创建 3 个队列管理器,例如GatewayQMApp1QMApp2QM

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

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

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

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

于 2013-10-03T05:10:05.590 回答
0

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

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

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

于 2013-10-20T17:51:41.723 回答