问题在哪里:
我们使用RabbitMQ作为任务队列。其中一项具体任务 - 向Vkontakte社交网络发送通知。他们api限制每秒请求和此限制根据您的应用程序大小。只需3个电话就可以获得不到10万人的应用程序,依此类推。所以我们需要人为地限制对他们的服务请求。现在这个逻辑基于应用程序。这很简单,虽然每个队列只能使用一个工作人员,但只需设置睡眠(300毫秒)并保持冷静。但是当你应该使用N个工作者时,这种同步变得微不足道。
如何使用RabbitMQ限制吞吐量?
基于上面的故事。如果可能的话,设置预取大小不仅基于消息,而且基于此逻辑的时间可以非常简单。例如,“每次获取的qos到1条消息不会快于1次,以秒为单位”等等。
答案 0 :(得分:1)
RabbitMQ无法开箱即用。
你是对的,对于分布式消费者而言,这种节流变得很困难。我建议看一下ZooKeeper,它允许你通过利用它的Znodes / Watches来同步所有消费者并限制消息的处理。 用于限制但可扩展的解决方案。