RabbitListener 多队列行为

RabbitListener multiple queues behavior

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

@RabbitListener(queues = {"q1", "q2", "q3"})
public class MyListener {

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

不确定 - 在消费者通道上执行了 3 basicConsume 个操作(如果您增加 concurrentConsumers,则每个消费者 3 个)。 basicConsume 操作通常按照队列定义的顺序执行(在所有情况下,除非一个或多个队列临时 "missing")。

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

我不知道代理在这种情况下使用的实际算法,但您应该假设它是不确定的 - SpringAMQP 将按照从经纪人。

编辑

我只是 运行 一个测试(2 个队列,每个队列有 2 个现有消息)并且当预取为 1 时,它们是循环传递的 - q1m1、q2m1、q1m2、q2m2。

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

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

EDIT2

Consumer Prefetch

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