我有以下代码,所以我从一个队列中读取消息,并将其重新发送到另一个队列。
我对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;
}
发布于 2018-10-12 03:49:20
启用concurrentConsumers
的全部目的是为了允许以并行方式处理消息,以便加快整体执行速度。通过这样做,您将自动签署一份合同,在该合同中,您接受一切都是异步的,并且不能再接受顺序。
如果您在线程之间定义一个序列,并等待前一个序列完成,以便您可以遵守该顺序,那么您将返回到顺序处理,并且启用并发消耗没有任何好处,相反,您将有处理多个线程的开销。
https://stackoverflow.com/questions/52766634
复制相似问题