我正在使用delayed_job
作为后台处理器并使用Rails ActiveJob
API构建Rails 5.1应用程序。
我有一份工作,它需要每小时运行两个应用程序之间的记录同步。作业完成后,应再次将自身重新添加(加入队列),以便下一小时运行。
但是,如果作业失败,它将在失败之前再次尝试作业多达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