9

问题在哪里:

我们使用 RabbitMQ 作为任务队列。具体任务之一 - 向 Vkontakte 社交网络发送通知。他们的 api 对每秒请求有限制,这个限制取决于您的应用程序大小。只有 3 次调用少于 10 万人的应用程序,依此类推。所以我们需要人为地限制对他们服务的请求。现在这个逻辑是基于应用程序的。虽然每个这样的队列只能使用一个工作人员,但很简单,只需设置诸如 sleep(300ms) 之类的东西并保持冷静。但是,当您应该使用 N 个工作人员时,这种同步就变得不简单了。

如何使用 RabbitMQ 限制吞吐量?

根据上面的故事。如果可以设置预取大小,不仅基于消息而且基于时间的逻辑可以非常简单。例如,“qos to 1 message per fetch not faster than 1 time in seconds”等等。

  1. 有这样的事情吗?
  2. 可能是其他策略吗?
4

1 回答 1

1

这在 RabbitMQ 中是不可能的。

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

于 2014-08-27T09:45:02.243 回答