如何使用Spring Boot从RabbitMQ队列中获取多个线程?

时间:2019-02-21 09:03:16

标签: java spring-boot rabbitmq

我们的应用程序使用RabbitMQ提供的多个队列中的数据。为了增加吞吐量,我们为每个队列启动了几个线程,这些线程从这些队列中进行阻塞。

对于一项新服务,我们要使用Spring Boot,并且每个队列又有几个线程从这些队列中获取数据。以下是规范的Spring Boot代码,用于处理从某些队列到达的数据:

@StreamListener(target = Processor.INPUT)
@SendTo(Processor.OUTPUT)
public Message<SomeData> process(Message<SomeData> message) {
    SomeData result = service.process(message.getPayload());
    return MessageBuilder
            .withPayload(result)
            .copyHeaders(message.getHeaders())
            .build();
}

现在的问题是如何使Spring Boot产生多个线程以服务一个队列,而不是单个线程。吞吐量对于我们的应用至关重要,因此需要这样做。

2 个答案:

答案 0 :(得分:1)

检查available properties,搜索rabbitmq。

  

spring.rabbitmq.listener.simple.concurrency =#侦听器调用者线程的最小数量

这看起来很有希望

答案 1 :(得分:1)

您可以在配置队列时为队列设置并发使用者。

@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory
        (MessageConverter contentTypeConverter,
         SimpleRabbitListenerContainerFactoryConfigurer configurer) {
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();

    // the number of consumers is set as 5
    factory.setConcurrentConsumers(5);

    configurer.configure(factory, connectionFactory);
    factory.setMessageConverter(contentTypeConverter);
    return factory;
}