HornetQ:依次消耗分布式队列

时间:2013-11-26 19:30:25

标签: java jboss jms message-queue hornetq

对于当前项目,我正在尝试使用JBoss 7.1和HornetQ(JMS)设置以下场景,我认为这是一个相当常见的用例:有三个应用程序服务器。许多MDB应该分别处理冗长计算过程的细分片段,这些任务应该分布在三个服务器中。当一个片段完成并且相应的结果准备就绪时,应将结果发送到分布式队列,从中消耗它以组装总结果。为了避免在总结果汇编期间出现竞争条件,必须按顺序处理“结果”队列,尽管它可以分布在多个服务器中。当另一条消息仍在进行中时,结果队列中的消息不会被处理。 管理约束是消费者(MDB或会话bean)消费来自结果队列的消息可以部署在所有集群节点上,即部署在集群节点上的EAR是相同的。在这种情况下,将在每个节点上部署相同的消费者代码。还有办法同步访问队列吗?

1 个答案:

答案 0 :(得分:1)

我不完全了解您的用例,但听起来您需要进行邮件分组。

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