gpt4 book ai didi

java - Spring和RabbitMQ中并发消费者接收消息的顺序

转载 作者:行者123 更新时间:2023-12-02 01:52:35 25 4
gpt4 key购买 nike

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

我对 setConcurrentConsumers(3) 方法感兴趣,这是否意味着将创建三个监听器线程?

在这种情况下,我如何理解重新发送到队列1和队列2的顺序将不会得到满足。对于我来说,重要的是要有与我收到消息时相同的消息顺序。

@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;
}

最佳答案

启用concurrentConsumers的全部目的是允许以并行方式处理消息,以加快整体执行速度。通过这样做,您将自动签署一份契约(Contract),在该契约(Contract)中您接受一切都是异步的,并且您不能再假设顺序。

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

关于java - Spring和RabbitMQ中并发消费者接收消息的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52766634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com