正确使用 SpringRabbit DirectMessageListenerContainer 和 setConsumersPerQueue 属性
Proper use of SpringRabbit DirectMessageListenerContainer and setConsumersPerQueue property
我使用 DirectMessageListenerContainer 来监听各个队列,因为它会为每个队列创建一个消费者,如果消息说 "queue1" 需要一段时间才能防止队列饥饿处理,而 "queue2" 上的处理速度很快。我对 DirectMessageListenerContainer.setConsumersPerQueue 方法感到困惑。默认值为 1 查看源代码。
在什么情况下需要将其增加到大于 1?如果保留默认值 1,如果提取大小大于 1,是否以多线程方式为给定队列处理消息?
DirectMessageListenerContainer
listenerContainer =
new DirectMessageListenerContainer(connectionFactory);
listenerContainer.setConsumersPerQueue(10);
listenerContainer.addQueueNames("queue1","queue2");
增加并发;例如,如果您的侦听器很慢,并且您不关心消息顺序,则可以将多个消费者分配到同一个队列并并行处理消息。根据您的消息数,您可能需要减少预取数,以便一个消费者不会 "grab" 启动期间的所有消息。
预取大小对并发没有影响;就是这样;预取。
我使用 DirectMessageListenerContainer 来监听各个队列,因为它会为每个队列创建一个消费者,如果消息说 "queue1" 需要一段时间才能防止队列饥饿处理,而 "queue2" 上的处理速度很快。我对 DirectMessageListenerContainer.setConsumersPerQueue 方法感到困惑。默认值为 1 查看源代码。
在什么情况下需要将其增加到大于 1?如果保留默认值 1,如果提取大小大于 1,是否以多线程方式为给定队列处理消息?
DirectMessageListenerContainer
listenerContainer =
new DirectMessageListenerContainer(connectionFactory);
listenerContainer.setConsumersPerQueue(10);
listenerContainer.addQueueNames("queue1","queue2");
增加并发;例如,如果您的侦听器很慢,并且您不关心消息顺序,则可以将多个消费者分配到同一个队列并并行处理消息。根据您的消息数,您可能需要减少预取数,以便一个消费者不会 "grab" 启动期间的所有消息。
预取大小对并发没有影响;就是这样;预取。