Я создаю приложение Rails 5.1 с использованием delayed_job
в качестве фонового процессора и с использованием Rails ActiveJob
API.
У меня есть задание, которое синхронизирует записи между двумя приложениями, которые мне нужно запускать каждоечас.Когда задание завершено, оно должно снова добавить (поставить в очередь) себя в очередь, чтобы оно могло выполняться в течение следующего часа.
Однако, если задание не выполнено, оно пытается выполнить задание снова до 5 раз (по умолчанию delayed_job - 25 попыток) до сбоя.
Вопросы:
Является ли это наилучшим подходом к сохранению работы задания (т.е. повторное добавление в очередь после неевыполняет)?Если нет, то какой подход лучше?
Учитывает ли after_perform
исключения или сбои?Если произойдет сбой 5 раз, будет ли он повторно добавляться в очередь 5 раз или только один раз?
Как я могу гарантировать, что это задание всегда будет добавлено в очередь, даже если оно завершится неудачей?Я согласен с тем, что он постоянно терпит неудачу, пока он продолжает добавлять себя в очередь.
class ApplicationJob < ActiveJob::Base
end
class SyncJob < ApplicationJob
after_perform :add_self_to_queue
def perform
# do stuff...
end
private
def add_self_to_queue
self.class.set(wait_until: next_run_at_time).perform_later
end
def next_run_at_time
1.hour.from_now.beginning_of_hour
end
end