gpt4 book ai didi

RabbitMQ 不均匀地向消费者分发消息

转载 作者:行者123 更新时间:2023-12-05 04:13:25 26 4
gpt4 key购买 nike

我们发现消息队列的消费者从字母范围顶部的队列中获取消息的问题。我们有两个应用程序:生产者订阅者。我们正在使用 RabbitMQ 3.6.1

假设消息队列是这样设置的:

Fig A

我们的第一个应用程序,生产者,每秒将 100 条消息放入每个队列:

Fig B

我们的第二个应用程序,订阅者,有五个独特的消费者方法,可以处理每个队列中的消息。每个方法都绑定(bind)到它各自的队列。 订阅者 的预取值为 1,这意味着无论队列如何,它一次只能保存一条消息。我们可能会像这样运行多个订阅者实例:

Fig C

所以情况是这样的:每个队列每秒接收 100 条消息,我们有四个 subscriber 实例使用这些消息,所以每个队列有四个消费者。假设消费者方法每个可以处理 25 msg/sec。

发生的情况是,不是所有队列都被平均消耗,而是按字母顺序排列较高的队列获得优先权。似乎当订阅者准备就绪时,RabbitMQ 查找这个特定就绪 channel 绑定(bind)到的队列列表,并选择第一个有待处理消息的队列。

在我们的情况下,A_QUEUE 将消耗每条消息。 B_QUEUE 在某些竞争条件下可能会消耗一些,但 C_QUEUE/D_QUEUE 尤其是 E_QUEUE 很少会被触及。

如果我们关闭发布者,队列最终会从上到下耗尽。

是否可以配置 RabbitMQ 本身或什至 channel 以使用某种循环分配策略或什至随机策略,以便当 channel 具有大量绑定(bind)队列时,都有待处理的消息,分布均匀吗?

最佳答案

澄清一下:您有一个包含多个消费者的订阅者应用程序,对吗?

我猜您在订阅者应用程序中使用了单个 RabbitMQ 连接。

您是否还为所有消费者重复使用了一个 RabbitMQ channel ?如果是这样,那将是一个问题。请务必为您启动的每个消费者使用一个新 channel 。

关于RabbitMQ 不均匀地向消费者分发消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37720312/

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