如何限制延迟作业不要激怒Facebook API

AnA*_*ice 7 ruby-on-rails delayed-job facebook-graph-api ruby-on-rails-3

我正在构建一个应用程序,它将很多地击中Facebook图形API.我了解到他们每600秒有600个请求的速率限制.

我正在使用延迟工作进行所有后台处理.安排延迟工作以保持在fb api速率限制之下的好方法是什么?是否有任何延迟工作的技巧或我是否需要构建一个单独的后台任务处理器以不超过我的速率限制?

谢谢

Lar*_*y K 3

每 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...'), 0,
#                           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                    
Run Code Online (Sandbox Code Playgroud)

为了实现您的目标,我将跟踪上次 FB api 调用排队的时间,并安排下一个调用每次运行至少一秒。

好处:您可以将其他非 FB 任务与 FB api 调用交错。