我正在构建一个应用程序,它将很多地击中Facebook图形API.我了解到他们每600秒有600个请求的速率限制.
我正在使用延迟工作进行所有后台处理.安排延迟工作以保持在fb api速率限制之下的好方法是什么?是否有任何延迟工作的技巧或我是否需要构建一个单独的后台任务处理器以不超过我的速率限制?
谢谢
解决方法
每600秒600次请求平均每秒1次.
不是很快!
1)根据您公司的规模和重量,我会调查FB,看看您是否可以获得为您筹集的限额.
2)你可以坚持使用DelayedJob,无需重新发明轮子.您只需要更改调度程序.
在我的DelayedJob安装中,我使用“run_at”列不仅仅是设置重试作业的时间 – 我还将其用作首先运行作业的时间.您还可以使用它来限制您的工作.
在DelayedJob文件job.rb中更改:
# added run_at param # eg Delayed::Job.enqueue NewsletterJob.new('lorem ipsum...'),# Delayed::Job.db_time_now + 15.minutes def self.enqueue(object,priority = 0,run_at = nil) unless object.respond_to?(:perform) raise ArgumentError,'Cannot enqueue items which do not respond to perform' end Job.create(:payload_object => object,:priority => priority,:run_at => run_at) end
为了你的目标,我会跟踪FB api呼叫最后一次入队的时间,并安排下一次将run_at调度至少一秒钟.
好处:您可以使用FB api调用交错其他非FB任务.