Spring boot RabbitMQ Spring引导AMQP-使用并发线程
我希望我的应用程序能够同时处理从RabbitMQ接收到的多条消息。 我可能已经尝试了所有的google-page-1解决方案,但都不起作用。 以下是我的设置: POM.xmlSpring 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>
<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类按预期工作,它一次只处理一个请求。我怎么知道
谢谢。
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;
}