RabbitListener有多个队列行为

时间:2016-05-09 12:07:29

标签: java spring rabbitmq spring-amqp spring-rabbitmq

使用以下构造时的行为是什么(Spring的最新版本)。我无法在文档中找到它。

$post = $this->Posts->get($id, [
    'contain' => ['Comments']
]);
// ...

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

1 个答案:

答案 0 :(得分:2)

这是不确定的 - 在消费者渠道上执行了3次basicConsume操作(如果你增加并发消费者,则每个消费者需要3次)。 basicConsume操作通常按照队列定义的顺序执行(在所有情况下除非一个或多个队列暂时"缺少")。

代理会针对每个队列(默认为1)从每个队列发送消息,直至prefetchCountbasicQos)。

我不知道代理在这种情况下使用的实际算法,但您应该假设它是不确定的 - Spring AMQP将按照从代理接收的顺序将它们传递给监听器。

编辑

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

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

当然,当队列为空时,消息通常会按照他们到达经纪人的顺序到达。

<强> EDIT2

请参阅Consumer Prefetch

Spring AMQP使用没有全局arg的basicQos变体,因此使用默认值(false)。这意味着预取是按用户进行的。