首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spring和RabbitMQ中并发消费者的消息接收顺序

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

Stack Overflow用户
提问于 2018-10-12 02:20:32
回答 1查看 692关注 0票数 0

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

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

在这种情况下,我所理解的重新发送到queue1和queue2的顺序将不会得到满足。对于我来说,重要的是有相同的消息顺序,就像我收到它的时候一样。

代码语言:javascript
复制
@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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-12 03:49:20

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52766634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档