如何使用RabbitMQ限制吞吐量?

mis*_*ion 9 message-queue rabbitmq task-queue vk

问题在哪里:

我们使用RabbitMQ作为任务队列.其中一项具体任务 - 向Vkontakte社交网络发送通知.他们api限制每秒请求和此限制根据您的应用程序大小.只需3个电话就可以获得少于10万人的应用程序,依此类推.所以我们需要人为地限制对他们的服务请求.现在这个逻辑基于应用程序.这很简单,虽然每个队列只能使用一个工作人员,但只需设置睡眠(300毫秒)并保持冷静.但是当你应该使用N个工作者时,这种同步变得微不足道.

如何使用RabbitMQ限制吞吐量?

基于上面的故事.如果可能的话,设置预取大小不仅基于消息,而且基于此逻辑的时间可以非常简单.例如,"每次获取的qos到1条消息不会快于1次,以秒为单位"等等.

  1. 有这样的事吗?
  2. 可能是关于此的其他策略?

Mar*_*ora 1

RabbitMQ 无法做到这一点。

你是对的,对于分布式消费者来说,这种限制变得很困难。我建议看看 ZooKeeper,它允许您同步所有消费者并通过利用它的 Znodes/ Watches 来实现节流但可扩展的解决方案来节流消息处理。