【问题标题】:HornetQ: consuming distributed queue sequentiallyHornetQ:顺序消费分布式队列
【发布时间】:2013-12-12 03:17:32
【问题描述】:

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

【问题讨论】:

  • 我不确定你想在这里实现什么。你不想在第一个消费的时候消费任何东西?您要么使用消息分组,要么保留一个消费者。消息传递本质上是异步的。您似乎想打破这个概念?

标签: java jboss jms message-queue hornetq


【解决方案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

【讨论】:

  • 谢谢,消息分组似乎真的是要走的路。关于我已经意识到的客户端缓冲问题。
猜你喜欢
  • 2014-06-08
  • 1970-01-01
  • 2016-04-27
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2013-11-28
  • 1970-01-01
相关资源
最近更新 更多