首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RabbitListener多队列行为

RabbitListener多队列行为
EN

Stack Overflow用户
提问于 2016-05-09 12:07:28
回答 1查看 3.7K关注 0票数 2

使用以下构造(Spring的最新版本)时的行为是什么?我在文件里找不到。

代码语言:javascript
复制
@RabbitListener(queues = {"q1", "q2", "q3"})
public class MyListener {

三个队列的消息是按什么顺序处理的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-09 13:46:17

它是不确定的--3 basicConsume操作是在使用者通道上执行的(如果增加concurrentConsumers,则为每个消费者3)。basicConsume操作通常按照定义队列的顺序执行(在所有情况下,除非一个或多个队列暂时“丢失”)。

代理将从每个队列向每个队列(默认1)的prefetchCount (basicQos)发送消息。

我不知道代理在这个场景中使用的实际算法,但是您应该假设它是不确定的- Spring将按照从代理接收的顺序将它们传递给侦听器。

编辑

我刚刚运行了一个测试(每个队列有2个现有消息),当预取值为1时,它们被传递给循环- q1m1、q2m1、q1m2、q2m2。

当预取设置为4时,我看到q1m1、q1m2、q2m1、q2m2。

当然,当队列为空时,消息通常会按照到达代理的顺序到达。

EDIT2

消费者预取

Spring使用没有全局arg的basicQos变量,因此使用默认(false)。这意味着预取是针对每个消费者的。

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

https://stackoverflow.com/questions/37115423

复制
相关文章

相似问题

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