|
对于最新稳定版本,请使用Spring AMQP 4.0.0! |
监听者并发
SimpleMessageListenerContainer
默认情况下,监听器容器启动一个接收队列消息的单一消费者。
在上一节查看表格时,你可以看到有许多属性和属性控制并发。
最简单的是并发消费者,这会产生(固定的)同时处理消息的消费者数量。
在1.3.0版本之前,这是唯一可用的设置,必须停止容器再重新启动才能更改设置。
自1.3.0版本起,你现在可以动态调整并发消费者财产。
如果在容器运行时更改,消费者会根据需要添加或移除以适应新设置。
此外,还有一个新财产,名为maxConcurrentConsumers已被添加,容器根据工作负载动态调整并发。
这与四个额外的属性结合:连续主动触发,startConsumerMinInterval,连续IdleTrigger和stopConsumerMinInterval.
在默认设置下,增加消费者的算法工作原理如下:
如果maxConcurrentConsumers未被触及,且现有消费者连续活跃十个周期,且自上次启动起至少10秒后,启动新消费者。
如果消费者至少收到一条消息,则该消费者被视为活跃批量大小 * 收到超时毫秒。
在默认设置下,减少消费者的算法工作方式如下:
如果有超过的话并发消费者运行中,且消费者检测到连续十次超时(空闲),且上一个消费者至少在60秒前被停止,那么消费者被停止了。
超时时间取决于收到超时以及批量大小性能。
如果消费者在 中没有收到消息,则该消费者被视为空闲批量大小 * 收到超时毫秒。
所以,默认超时(一秒钟)和批量大小其中四次中,40秒空闲后考虑停止用户(四次超时对应一次空闲检测)。
| 实际上,只有当整个容器闲置一段时间时,消费者才能停止使用。 这是因为经纪人会在所有活跃用户之间分享其工作。 |
每个消费者使用一个信道,无论配置了多少队列。
从2.0版本开始,并发消费者和maxConcurrentConsumers属性可以用并发财产——例如,2-4.
用DirectMessageListenerContainer
在该容器中,并发基于配置的队列和消费者按队列.
每个队列的每个消费者使用独立通道,并发由兔客户端库控制。
默认情况下,在撰写时,它使用一个池DEFAULT_NUM_THREADS = Runtime.getRuntime().availableProcessors() * 2线程。
你可以配置一个任务执行者以提供所需的最大并发。