对于当前项目,我尝试使用JBoss 7.1和HornetQ(JMS)设置以下场景,我认为这是一个相当普遍的用例:有三个应用程序服务器。许多MDB应该每个处理一个冗长的计算过程的分解片段,任务应该分布在三个服务器之间。当一个片段完成并准备好相应的结果时,应将结果发送到分布式队列,从那里消费总结果。为了避免在总结果汇编过程中出现争用情况,尽管必须在多个服务器之间分配“结果”队列,但必须顺序对其进行处理。当另一个消息仍在进行中时,结果队列中的任何消息都不会被处理。
管理上的限制是,使用来自结果队列的消息的使用者(MDB或会话Bean)可以部署在所有群集节点上,即,部署在群集节点上的EAR是相同的。在这种情况下,相同的使用者代码将部署在每个节点上。仍然有一种同步访问队列的方法吗?

最佳答案

我不完全了解您的用例,但是听起来您需要消息分组。

http://docs.jboss.org/hornetq/2.4.0.beta1/docs/user-manual/html/message-grouping.html

如果您以更简单的方式发布问题,而无需深入了解您的测试用例,那么我可以理解,我也许可以为该答案添加更多信息。

您还谈到了漫长的过程。听起来可能有客户端正在缓冲。通过在serverLocator上设置consumer-window-size = 0来处理慢速消费者。

hornetq上的此示例说明了如何实现此目标:

http://docs.jboss.org/hornetq/2.4.0.beta1/docs/user-manual/html/examples.html#examples.no-consumer-buffering

07-28 13:12