我们的应用程序使用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产生多个线程以服务一个队列,而不是单个线程。吞吐量对于我们的应用至关重要,因此需要这样做。
答案 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;
}