我观察到队列中有多条消息,但我的工作人员正在逐个挑选消息,而不是并行处理消息。我在这里做错了什么?我如何处理多条消息,而不是最多利用我的员工处理。有什么最佳实践吗?
我不确定并发值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;
}