Spring引导+Rabbit MQ并行处理消息



我观察到队列中有多条消息,但我的工作人员正在逐个挑选消息,而不是并行处理消息。我在这里做错了什么?我如何处理多条消息,而不是最多利用我的员工处理。有什么最佳实践吗?

我不确定并发值8在这里做什么。

application.yml

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,那么您可以指定参数"并发性";就在你的代码里。例如:

@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;
}

最新更新