执行后如何继续将作业添加到后台队列?

时间:2018-11-26 18:19:55

标签: ruby-on-rails background-process delayed-job rails-activejob

我正在使用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

0 个答案:

没有答案