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

Activemq 如何改进大队列的消息处理?,activemq,spring-jms,Activemq,Spring Jms,我尝试使用SpringJMS和ActiveMQ来处理大量消息。问题的背景如下: 每个客户生成一组添加到队列中的消息。消息以客户id作为参数添加到队列中 在一种情况下,客户A可以向队列添加10k条消息,而客户B仅向同一队列添加100条消息。我的问题是,客户B需要等到所有10k消息处理完毕后,才能处理其100条消息 是否有办法同时处理客户a和客户B的部分消息?我知道可以选择对来自客户B的消息设置更高的优先级,但这并不能解决多个客户时的问题。消息较多的客户将填满队列,而其他客户将不得不等待 如果您能提

我尝试使用SpringJMS和ActiveMQ来处理大量消息。问题的背景如下: 每个客户生成一组添加到队列中的消息。消息以客户id作为参数添加到队列中

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

是否有办法同时处理客户a和客户B的部分消息?我知道可以选择对来自客户B的消息设置更高的优先级,但这并不能解决多个客户时的问题。消息较多的客户将填满队列,而其他客户将不得不等待


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

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

我想说,您可以对activemq进行微调,使其能够批量处理消息的数量。此外,还有一些方法可以微调给定的代理和队列。有关更多详细信息,请参阅此链接:


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


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

谢谢您的回答。我在考虑为每个客户动态创建队列。该选项的问题是,我看不到如何使用JMSTemplate列出队列。您还知道是否可以将使用者动态分配到队列。从某种意义上说,消费者总是与给定的队列相关联。我对Spring的JMSTemplate不是很熟悉。我的印象是,它适用于一组狭窄的用例,但它不是很灵活。我可能错了。我建议您创建一个新问题,让专家提供一些指导。感谢您的快速反馈@Justin Bertram感谢您的反馈,但这并没有真正的帮助。这只会有助于更快地处理消息,而不会同时处理不同的客户。队列的语义仍然是FIFO。换句话说,来自一个组的消息不能在它前面的组中的消息之前被处理。我同意@JustinBertram,它仍然是FIFO。但是,我对应用程序处理工作流进行了更改。客户A和客户B仍然存在,但是我创建了一小批10条与消息组关联的消息。因此,可以同时处理来自客户机a和B的消息。来自A的10k消息将以100组扇出,而来自B的100条消息将以10组扇出。理论上,这些组由不同的消费者处理,因此来自A和B的消息应该同时处理。