Spring boot RabbitMQ Spring引导AMQP-使用并发线程

Spring boot RabbitMQ Spring引导AMQP-使用并发线程,spring-boot,rabbitmq,spring-amqp,Spring Boot,Rabbitmq,Spring Amqp,我希望我的应用程序能够同时处理从RabbitMQ接收到的多条消息。 我可能已经尝试了所有的google-page-1解决方案,但都不起作用。 以下是我的设置: POM.xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>

我希望我的应用程序能够同时处理从RabbitMQ接收到的多条消息。 我可能已经尝试了所有的google-page-1解决方案,但都不起作用。 以下是我的设置:

POM.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.10.RELEASE</version>
</parent>
.
.
.
<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit</artifactId>
</dependency>
配置文件:

@Configuration
public class RabbitMQConfig {

    @Value("${com.cp.neworder.queue.name}")
    private String newOrderQueueName;
    @Value("${com.cp.neworder.queue.exchange}")
    private String newOrderExchangeName;

    @Bean
    Queue queue() {
        return new Queue(newOrderQueueName, true);
    }

    @Bean
    TopicExchange exchange() {
        return new TopicExchange(newOrderExchangeName);
    }

    @Bean
    Binding binding(Queue queue, TopicExchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with(newOrderQueueName);
    }

    @Bean
    SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.setQueueNames(newOrderQueueName);
        container.setMessageListener(listenerAdapter);
        return container;
    }

    @Bean
    MessageListenerAdapter listenerAdapter(OrderMessageListener receiver) {
        return new MessageListenerAdapter(receiver, "receiveOrder");
    }

}
我的consumer类按预期工作,它一次只处理一个请求。我怎么知道

  • 我将异步请求的进程保存在DB中,这样我就可以查询目前有多少个请求正在处理,而且总是1个
  • 我可以看看RabbitMQ管理平台,我看到它正在一个接一个地退出队列
  • 我的设置中有哪些错误?我如何让它工作


    谢谢。

    SimpleMessageListenerContainer
    有一种设置并发使用者的方法。它有
    setConcurrentConsumers
    ,您可以在其中设置使用者的数量

        @Bean
        SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
          SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
          container.setConnectionFactory(connectionFactory);
          container.setQueueNames(newOrderQueueName);
          container.setMessageListener(listenerAdapter);
          container. setConcurrentConsumers(10);
          return container;
      }
    

    使用此配置,启动应用程序时,您将能够在RabbitMQ admin中看到多个使用者,因为您没有使用Boot创建容器,因此不会应用启动属性

    试一试


    建议的并发消费者数量是多少?
        @Bean
        SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
          SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
          container.setConnectionFactory(connectionFactory);
          container.setQueueNames(newOrderQueueName);
          container.setMessageListener(listenerAdapter);
          container. setConcurrentConsumers(10);
          return container;
      }
    
    @Bean
    SimpleMessageListenerContainer container(ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter,  
                   RabbitProperties properties) {
    
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.setQueueNames(newOrderQueueName);
        container.setMessageListener(listenerAdapter);
    
        container.setConcurrentConsumers(properties.getListener().getSimple().getConcurrency();
    
        return container;
    }