gpt4 book ai didi

java - RabbitListener 多队列行为

转载 作者:行者123 更新时间:2023-11-30 08:37:33 26 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

编辑

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

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

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

EDIT2

参见 Consumer Prefetch .

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

关于java - RabbitListener 多队列行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37115423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com