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

How to improve message processing with large queues?

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

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

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

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

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

我想说你可以微调你的 activemq 它正在批量处理的消息数量。此外,您还可以通过多种方式微调给定的 Broker 和队列。有关详细信息,请参阅此 link:

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

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

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