如何使用RabbitMQ限制吞吐量?

如何使用RabbitMQ限制吞吐量?,rabbitmq,message-queue,task-queue,vk,Rabbitmq,Message Queue,Task Queue,Vk,问题出在哪里: 我们使用RabbitMQ作为任务队列。其中一项具体任务是向Vkontakte社交网络发送通知。他们api有每秒请求的限制,这个限制取决于您的应用程序大小。只需3次呼叫10万人以下的应用程序,以此类推。所以我们需要人为地限制对他们服务的请求。现在这个逻辑是基于应用程序的。这很简单,虽然您可以在每个这样的队列中只使用一个worker,但只需设置睡眠(300ms)之类的值,然后保持冷静。但是,当您应该使用N个worker时,这种同步就变得非常重要了 如何使用RabbitMQ限制吞吐量?

问题出在哪里:

我们使用RabbitMQ作为任务队列。其中一项具体任务是向Vkontakte社交网络发送通知。他们api有每秒请求的限制,这个限制取决于您的应用程序大小。只需3次呼叫10万人以下的应用程序,以此类推。所以我们需要人为地限制对他们服务的请求。现在这个逻辑是基于应用程序的。这很简单,虽然您可以在每个这样的队列中只使用一个worker,但只需设置睡眠(300ms)之类的值,然后保持冷静。但是,当您应该使用N个worker时,这种同步就变得非常重要了

如何使用RabbitMQ限制吞吐量?

根据上面的故事。如果有可能的话,将预取大小设置为不仅基于消息,而且基于时间,这样的逻辑就简单多了。例如,“每次获取1条消息的qos不超过1秒”等等

  • 有这样的东西吗
  • 可能还有其他策略吗
    这在RabbitMQ中是不可能的

    你说得对,对于分布式消费者来说,这种节流变得很困难。我建议您看看ZooKeeper,它允许您通过利用其Znodes/
    用于节流但可扩展的解决方案。

    是否将N个使用者用于同一队列?您是否需要“安排”一个或多个队列?是的,同一队列上有N个消费者。它应该按队列进行调度。