正确使用SpringRabbit DirectMessageListenerContainer和setConsumersPerQueue属性

问题描述 投票:0回答:1

我使用DirectMessageListenerContainer来监听各个队列,因为它创建了使用者每个队列,如果说“ queue1”上的消息需要花费一些时间来处理,而“ queue2”上的消息则需要快速处理,则可以防止队列不足。处理。我对DirectMessageListenerContainer.setConsumersPerQueue方法感到困惑。缺省值为1,查看源代码。

在什么条件下,需要将其增加到大于1?如果保留默认值1,并且获取大小大于1,则是否以给定队列的多线程方式处理消息?

    DirectMessageListenerContainer
        listenerContainer =
        new DirectMessageListenerContainer(connectionFactory);

    listenerContainer.setConsumersPerQueue(10);
    listenerContainer.addQueueNames("queue1","queue2");

spring-boot rabbitmq spring-rabbitmq
1个回答
0
投票
这是为了增加并发性;例如,如果您的侦听器速度很慢,并且您不关心消息的顺序,则可以将多个使用者分配到同一队列并并行处理消息。根据您的消息计数,您可能需要减少预取计数,以使一个使用者在启动过程中不会“抓取”所有消息。

预取大小对并发没有影响;就是这样预取。

© www.soinside.com 2019 - 2024. All rights reserved.