为消息队列实现"漏桶"类似算法

时间:2015-03-18 09:00:25

标签: ruby redis rabbitmq throttling rate-limiting

我有一个基于ruby的应用程序,它有许多不同的消息队列(+200个不同的队列),所有这些消息队列都需要单独进行限制/速率限制。我试图用这个糖果自动售货机类比来说明问题

Leaky Candy Vending Machine

现在我将如何实现这样的系统/算法?我一直在考虑把消息/" candy"进入不同的redis列表/集合或RabbitMQ队列,但是以各个速率从每个队列中弹出它们似乎是一项艰巨的任务。是否有一些技术比redis更适合这项工作?

1 个答案:

答案 0 :(得分:0)

您可以使用Resque(也使用Redis进行持久化)。您可以为每种类型的“糖果”使用不同的队列。并为--interval选项的不同值为每个队列启动一个worker。

$ bin/resque work --queues=blue  --interval=10
$ bin/resque work --queues=green --interval=2
$ bin/resque work --queues=red   --interval=5