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