如何为Resque队列添加速率限制?

时间:2013-11-18 21:21:38

标签: ruby-on-rails resque

所以我有一个调用API的Resque工作者,问题是API的速率限制为每秒2个请求。

有没有办法在特定队列中处理的每个作业之间添加延迟?

P.S。队列可能有数千个待处理的作业。

2 个答案:

答案 0 :(得分:1)

为什么不在整个过程中睡一段时间?好吧,也许你希望你的resque工作者做一些有用的事情。在CPU时间,半秒钟是很多时间 - 你可以在那里做一些有用的事情,比如从另一个没有速率限制的队列处理一个工作。

我自己也遇到同样的问题,所以我有动力找到解决方案。似乎有两种简单的方法可以做到这一点。第一个想法是使用resque调度程序并在插入之前预先计算运行作业的时间。这似乎容易出错。第二种方法是使用类似https://github.com/flyerhzm/resque-restriction的宝石(免责声明:只是通过一些谷歌搜索找到它。还没有使用它)和速率限制,因为你将关闭队列。在理论上似乎是一个强大的解决方案。请注意,如果您还没有执行该作业,它永远不会从队列中删除,所以您将改为使用其他内容 - 更有效地使用您的工作人员。

答案 1 :(得分:0)

根据我的评论,我建议您在每个Resque sleep方法结束时在指定的秒数内执行process