首页 > 解决方案 > 正确使用 SpringRabbit DirectMessageListenerContainer 和 setConsumersPerQueue 属性

问题描述

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

在什么条件下需要将其增加到大于 1?如果保留默认值 1,如果 fetch size 大于 1,消息处理是否以多线程方式为给定队列完成?

    DirectMessageListenerContainer
        listenerContainer =
        new DirectMessageListenerContainer(connectionFactory);

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

标签: spring-bootrabbitmqspring-rabbit

解决方案


是为了增加并发;例如,如果您的侦听器很慢,并且您不关心消息排序,则可以将多个消费者分配到同一个队列并并行处理消息。根据您的消息计数,您可能需要减少预取计数,以便一个使用者在启动期间不会“抓取”所有消息。

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


推荐阅读