Spring boot 弹簧靴&x2B;rabbitmq并行处理消息
我观察到队列中有多条消息,但我的工作人员正在一条接一条地拾取消息,而不是以视差方式处理消息。我做错了什么?我如何以视差方式处理多条消息,以最大限度地利用我的辅助处理。有什么最佳做法吗 我不确定并发值8在这里做什么 application.ymlSpring boot 弹簧靴&x2B;rabbitmq并行处理消息,spring-boot,rabbitmq,Spring Boot,Rabbitmq,我观察到队列中有多条消息,但我的工作人员正在一条接一条地拾取消息,而不是以视差方式处理消息。我做错了什么?我如何以视差方式处理多条消息,以最大限度地利用我的辅助处理。有什么最佳做法吗 我不确定并发值8在这里做什么 application.yml spring: rabbitmq: host: port: username: virtual-host: password: listener: simple:
spring:
rabbitmq:
host:
port:
username:
virtual-host:
password:
listener:
simple:
concurrency: 8
prefetch: 8
Bean配置:
@Bean
Queue queue() {
return new Queue("testQ", true);
}
@Bean
TopicExchange exchange() {
return new TopicExchange("testE");
}
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind("testQ").to("testE").with("a.b.c");
}
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames("testQ");
container.setMessageListener(listenerAdapter);
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
return new MessageListenerAdapter(receiver, "handleMessage");
}
我认为,如果您自己在代码中创建SimpleMessageListenerContainer,那么您可以在代码中指定参数“concurrency”。例如:
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames("testQ");
container.setConcurrency("8"); //set 'Concurrency' property for your container
container.setMessageListener(listenerAdapter);
return container;
}
参考: