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
Для вашей цели я бы отслеживал, когда в последний раз вызов API FB был поставлен в очередь, и планировал следующий запуск run_at как минимум на секунду больше.
Преимущество: вы сможете чередовать другие задачи, не относящиеся к FB, с вызовами API FB.
person
Larry K
schedule
05.05.2011