Как сохранить добавление задания в фоновую очередь после его выполнения? - PullRequest
0 голосов
/ 26 ноября 2018

Я создаю приложение 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
...