在Spring和RabbitMQ中与并发使用者接收消息的顺序

时间:2018-10-11 18:20:32

标签: java spring rabbitmq spring-rabbitmq

我有以下代码,因此我从一个队列中读取消息并将其重新发送到另一队列。

我对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;
}

1 个答案:

答案 0 :(得分:2)

启用concurrentConsumers的全部目的是允许以并行方式处理消息,以加快整体执行速度。通过这样做,您可以自动唱歌一份合同,在该合同中,您接受一切都是异步的,并且您不再可以承担订单。

如果您在线程之间定义了一个序列并等待前一个序列完成,以便您可以遵守顺序,那么您将返回顺序处理,并且启用并发使用没有任何好处,相反,您将有大量开销用于处理多个线程。