【问题标题】:Rabbitmq concurrent consumers in Spring bootSpring boot 中的 Rabbitmq 并发消费者
【发布时间】:2018-02-27 20:29:17
【问题描述】:

我正在使用@RabbitListener 注释和 SimpleRabbitListenerContainerFactory bean 来并行执行 rabbitmq 消息并通过以下方式设置最小和最大并发消费者:

@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory());
    factory.setConcurrentConsumers(MIN_RABBIT_CONCURRENT_CONSUMERS);
    factory.setMaxConcurrentConsumers(MAX_RABBIT_CONCURRENT_CONSUMERS);
    factory.setConsecutiveActiveTrigger(1);
    factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
    return factory;
}

最小限制为 3,最大限制为 10。使用此配置,即使队列中有 12 条消息,也只有 3 条消息被并行执行。

请告诉我配置有什么问题?

【问题讨论】:

    标签: spring spring-boot rabbitmq spring-amqp


    【解决方案1】:

    您可以使用 rabbitMQ 注释创建最大并发消费者

    @RabbitListener(queues = "your-queue-name", concurrency = "4")
    public void customCheck(Object requestObject) {
        // process
    }
    

    【讨论】:

    • 每次调用这个方法时可以改变并发吗?
    • S Khandelwal 它将增加直到您添加的并发数。它不会比给定并发消耗更多的请求。
    【解决方案2】:

    使用默认配置,如果其他消费者仍然忙碌,则每 10 秒添加一个新消费者。

    算法(以及影响它的属性)是described here

    【讨论】:

    • 谢谢;链接已修复。
    • @GaryRussell 嗨,Gary,是否需要配置 SimpleRabbitListenerContainerFactory bean 才能获得您提到的默认消费者缩放?或者它是否与 Spring AMQP 一起出现?
    • 不要对旧答案提出新问题。是的,它是 Spring AMQP 的标准配置。如果您需要更多信息,请提出新问题。
    猜你喜欢
    • 2015-10-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 2011-04-15
    • 2018-10-20
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多