如何改善大队列的消息处理?

问题描述 投票:0回答:3

我正在尝试使用Spring JMS和ActiveMQ来处理大量消息。问题的上下文如下:每个客户都会生成一组添加到队列中的消息。消息将以客户ID作为参数添加到队列中。

在一种情况下,客户A可以向队列添加10k消息,而客户B仅向同一队列添加100消息。我的问题是客户B需要等到所有10k消息都完成处理才能处理100条消息。

有没有办法同时处理客户A的一些消息和客户B的一些消息?我知道可以选择为来自客户B的消息设置更高的优先级,但是当有更多的客户时,这并不能解决问题。拥有更多消息的客户将填满队列,而其他人则必须等待。

如果您能提供一些帮助或建议,我将不胜感激。

activemq spring-jms
3个回答
1
投票

队列的基本语义是先进先出(即FIFO)。没有真正的方法来逃避这一点。我建议您重新设计应用程序以使用多个队列 - 每个“类型”的消息或您拥有的独立应用程序。


0
投票

我想说你可以微调你的activemq它批量处理的消息数量。此外,还有一种方法可以微调给定的Broker和队列。有关详细信息,请参阅此链接:

http://activemq.apache.org/performance-tuning

https://access.redhat.com/documentation/en-US/Fuse_ESB/4.4.1/html-single/ActiveMQ_Tuning_Guide/index.html


0
投票

我想我找到了问题的解决方案。它涉及使用消息组。对于每条消息,我将属性JMSXGroupID设置为客户的标识符。

由于它们是多个消息组,因此队列负责将来自不同组的消息分配给不同的消费者。这样,可以处理来自客户B的文档,同时仍然处理来自客户A的文档。

© www.soinside.com 2019 - 2024. All rights reserved.