我有以下代码,因此我从一个队列中读取消息并将其重新发送到另一队列。
我对setConcurrentConsumers(3)
方法感兴趣,这是否意味着将创建三个侦听器线程?
在这种情况下,无法理解重新发送到queue1和queue2的顺序。对我来说,导入具有与接收时相同的消息顺序。
@RabbitListener(queues = "queue",containerFactory="rabbitListenerContainerFactory")
public void processQueue(String message) {
rabittemplate.send("queue1", message);
rabittemplate.send("queue2", message);
}
@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(connectionFactory());
factory.setConcurrentConsumers(3);
factory.setMaxConcurrentConsumers(10);
return factory;
}
答案 0 :(得分:2)
启用concurrentConsumers
的全部目的是允许以并行方式处理消息,以加快整体执行速度。通过这样做,您可以自动唱歌一份合同,在该合同中,您接受一切都是异步的,并且您不再可以承担订单。
如果您在线程之间定义了一个序列并等待前一个序列完成,以便您可以遵守顺序,那么您将返回顺序处理,并且启用并发使用没有任何好处,相反,您将有大量开销用于处理多个线程。