使用以下构造(Spring的最新版本)时的行为是什么?我在文件里找不到。
@RabbitListener(queues = {"q1", "q2", "q3"})
public class MyListener {三个队列的消息是按什么顺序处理的?
发布于 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)。这意味着预取是针对每个消费者的。
https://stackoverflow.com/questions/37115423
复制相似问题