消息分组如何影响消息在并发消费者之间的分布?
How does message-grouping impact distribution of the messages among concurrent consumers?
下图描述了我使用消息组和基于 Spring 的 JMS 消费者的基本用例。
请注意,这里的并发指的是如下图设置的配置:
defaultJmsListenerContainerFactory.setConcurrency("3-10");
- G1 和 G2 侦听器是否会同时接收各自组的消息?
- 在任何情况下,来自一个组的消息是否会等待另一组中任何消息的发送?
一般来说,多个接收分组消息的消费者是可以并发接收的。但是,有一些注意事项...
核心 JMS 客户端实现实际上使用来自 local 数据结构的消息,该数据结构根据 consumerWindowSize
异步填充消息,即 1 MiB (1024 * 1024字节)默认。如果一个消费者正在接收来自一个大的、连续的组的消息,并且它的“window”被填满,那么代理将不能再向它发送任何消息,并且必须等待消费者按顺序确认消息派遣更多。一旦分派了分组消息块,代理就可以将来自其他组的消息分派给其他消费者。
这在 the documentation 中也有解释(尽管细节略少)。
下图描述了我使用消息组和基于 Spring 的 JMS 消费者的基本用例。
请注意,这里的并发指的是如下图设置的配置:
defaultJmsListenerContainerFactory.setConcurrency("3-10");
- G1 和 G2 侦听器是否会同时接收各自组的消息?
- 在任何情况下,来自一个组的消息是否会等待另一组中任何消息的发送?
一般来说,多个接收分组消息的消费者是可以并发接收的。但是,有一些注意事项...
核心 JMS 客户端实现实际上使用来自 local 数据结构的消息,该数据结构根据 consumerWindowSize
异步填充消息,即 1 MiB (1024 * 1024字节)默认。如果一个消费者正在接收来自一个大的、连续的组的消息,并且它的“window”被填满,那么代理将不能再向它发送任何消息,并且必须等待消费者按顺序确认消息派遣更多。一旦分派了分组消息块,代理就可以将来自其他组的消息分派给其他消费者。
这在 the documentation 中也有解释(尽管细节略少)。