私はSpringでのメッセージ処理にかなり新しいので、私に同行してください。SpringのRabbitMQメッセージの同時処理
私のRabbitMQメッセージハンドラは、複数のスレッドで同時にメッセージを処理したいと思います。
@Component
public class ConsumerService {
@RabbitListener(queues = {"q"})
public void messageHandler(@Payload M msg) {
System.out.println(msg);
}
}
...
@Configuration
@Import({MessageConverterConfiguration.class, ConsumerService.class})
public class ConsumerConfiguration {
@Autowired
private ConnectionFactory connectionFactory;
@Bean
public List<Declarable> declarations() {
return Arrays.asList(
new DirectExchange("e", true, false),
new Queue("q", true, false, false),
new Binding("q", Binding.DestinationType.QUEUE, "e", "q", null)
);
}
@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(MessageConverter contentTypeConverter, SimpleRabbitListenerContainerFactoryConfigurer configurer) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConcurrentConsumers(10);
configurer.configure(factory, connectionFactory);
factory.setMessageConverter(contentTypeConverter);
return factory;
}
}
私の小さなテストでは、キュー "q"に4つのメッセージがあります。私はそれらをすべて処理します。それは結構です。しかし、私はそれを一つずつ処理します。 "ConsumerService.messageHandler"(本質的にメッセージの処理の完了を遅らせる)にブレークポイントを設定すると、そのブレークポイントに4つのスレッドがあることになります。しかし、私は決して複数のスレッドを持っていません。メッセージの処理を完了するとすぐに、次のメッセージが処理されます。メッセージを同時に処理するには何が必要ですか?