【问题标题】:RabbitMQ: Checking for queue size from the publisherRabbitMQ:检查发布者的队列大小
【发布时间】:2019-05-28 05:38:45
【问题描述】:

在 rabbitmq 文档中看到非常大的队列大小会对队列性能产生负面影响,这让我很惊讶。我有一个工作调度程序,它可能会将 30k+ 消息排入队列以供工作消费者使用,并且即使在增加消费者数量之后也注意到性能不佳。然后我从发布端编写代码来检查队列的大小,如果它太大,则休眠一段时间,直到队列大小更小。

我发现这可以提高性能,但我质疑这背后的逻辑。发布者必须知道排队系统的这些细节,以至于它必须对自己进行速率限制,这似乎很臭,这有点破坏了抽象,不是吗?这对所有消息队列系统都是正常的吗?是否有其他解决方案,无论是使用 RabbitMQ 还是其他库?

【问题讨论】:

    标签: rabbitmq message-queue amqp


    【解决方案1】:

    您的发布者不必担心队列大小是正确的。但是,程序员应该:

    1. 确保您有足够的硬件和/或集群的水平规模来处理消息量。假设它们的大小合适,30k 条消息对于单个代理机器来说应该不是一件难事。

    2. 确保您的消息不超过 100kb。如果它们包含大型二进制对象,您需要将这些对象保存到数据存储中,并且只在消息中发布指向这些资源的指针。

    3. RabbitMQ 具有流控制功能来处理过度热心的发布者。我不确定你的设置是什么,但你可以调整它们来调用它。阅读更多:https://www.rabbitmq.com/flow-control.html

    请记住,理想的作业队列大小为零,因此您的系统应设计为尽可能缩短队列长度。这意味着以大致相同的速度处理消息。

    【讨论】:

      猜你喜欢
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 2015-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多