2012-01-03 97 views
1

我们正在开发将部署到WAS集群的应用程序。该应用程序从多个JMS(Websphere MQ)队列中消费消息,并将结果写入单个数据库。Websphere Application Server集群和JMS消息消耗

但是,我们有一个要求,即在应用程序内深处,给定ID的所有消息一次处理一个。我们目前使用同步收集强制执行此操作,但这不适用于群集。

那么有没有一种配置应用程序/集群/激活规范来实现这一目标的方法?

回答

0

首先要认识到的是,应用程序的设计必须消除消息的亲和性才能水平扩展。对于克服应用程序的设计限制,可以预期消息传输有多少限制。根据消息有效载荷内容改变消息传递路线,顺序或目的地的处理对于ESB而不是传输而言是正确的作业。最佳解决方案是使用适合水平缩放的体系结构重新设计应用程序。

也就是说,一种方法是使用消息组。寻找新组的应用程序实例应忽略其中JMSXGroupID不是1的任何消息。发送消息的应用程序必须准备好相应地设置组ID和序列号。

完成此操作的另一种方法是通过拦截和发送。程序读取主队列以查找ID的新实例。当它看到一个新的ID时,它将该消息移动到一个单独的调度队列。使用中的应用程序实例都读取调度队列寻找工作。由于此队列中的ID保证是唯一的,因此每个ID都分配给特定的应用程序实例。然后,应用程序使用要处理的ID的选择器打开主队列。生产者应用程序必须将ID设置为消息属性或在相关性ID字段中进行选择,但不需要管理组。

0

我可以告诉你和以前的响应者知道了很多关于这方面比我做的,但万一这有助于...

我们有,我们要处理的只有一个请求的MDB因此我们将激活规范中的“最大并发端点”设置为1.

因此,也许您可​​以对此特定ID使用不同的目标,或者让初始目标的逻辑重新排列ID到第二个目的地?