消息分组如何影响消息在并发消费者之间的分布?

How does message-grouping impact distribution of the messages among concurrent consumers?

下图描述了我使用消息组和基于 Spring 的 JMS 消费者的基本用例。

请注意,这里的并发指的是如下图设置的配置:

defaultJmsListenerContainerFactory.setConcurrency("3-10");

一般来说,多个接收分组消息的消费者是可以并发接收的。但是,有一些注意事项...

核心 JMS 客户端实现实际上使用来自 local 数据结构的消息,该数据结构根据 consumerWindowSize 异步填充消息,即 1 MiB (1024 * 1024字节)默认。如果一个消费者正在接收来自一个大的、连续的组的消息,并且它的“window”被填满,那么代理将不能再向它发送任何消息,并且必须等待消费者按顺序确认消息派遣更多。一旦分派了分组消息块,代理就可以将来自其他组的消息分派给其他消费者。

这在 the documentation 中也有解释(尽管细节略少)。