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

时间:2019-04-10 20:15:36

标签: activemq spring-jms

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

在一种情况下,客户A可以将1万条消息添加到队列中,而客户B只能将100条消息添加到该队列中。我的问题是,客户B需要等到所有10k消息都已完成处理,然后再处理其100条消息。

是否可以同时处理客户A的某些消息和客户B的某些消息?我知道可以对来自客户B的消息设置更高的优先级,但是当有多个客户时,这不能解决问题。收到更多消息的客户将填满队列,而其他消息的客户将不得不等待。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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

答案 2 :(得分:0)

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

由于它们是多个消息组,因此队列负责将消息从不同的组分配给不同的使用者。这样,可以在处理客户B的文档的同时处理客户B的文档。