Поведение ActiveJob по умолчанию при возникновении исключения во время выполнения

#ruby-on-rails #rails-activejob

#ruby-on-rails #rails-activejob

Вопрос:

Я не понимаю, как ActiveJob обрабатываются повторные попытки, когда возникает исключение во время выполнения задания. В руководстве Rails о ActiveJob есть этот пример:

10.1 Повторная попытка или удаление неудачных заданий

Также возможно повторить попытку или отменить задание, если во время выполнения возникает исключение. Например:

 class RemoteServiceJob < ApplicationJob
  retry_on CustomAppException # defaults to 3s wait, 5 attempts

  discard_on ActiveJob::DeserializationError

  def perform(*args)
    # Might raise CustomAppException or ActiveJob::DeserializationError
  end
end
  

Для получения более подробной информации см. Документацию API для ActiveJob::Exceptions .

Это означает, что существует метод, который явно указывает ActiveJob повторить задание для определенных исключений, и в то же время существует метод, который явно указывает ActiveJob отменить задание для определенных исключений.

Но как ActiveJob обрабатывать исключения, когда разработчик не определил retry_on или discard_on ? Каково поведение по умолчанию? Отменит ли это задание? Будет ли это повторять задание? И если да, то как часто и через какой интервал?

Комментарии:

1. То, как фактически выполняются задания, зависит от используемого адаптера. Вы можете найти реализацию встроенного адаптера в ActiveJob::Execution . Насколько я могу судить, у него нет списка исключений по умолчанию, который он обрабатывает.

2. Асинхронный адаптер по умолчанию в значительной степени зависит от параллельного ruby gem для выполнения. Смотрите документы для Concurrent::ScheduledTask#execute .

3. @max Таким образом, вы говорите, что поведение по умолчанию для неудачных попыток выполнения активных заданий полностью зависит от используемого серверной части? Это означает, что для одного серверного сервера (например, Sidekiq) по умолчанию может выполняться многократная попытка в течение нескольких дней, тогда как при переключении на другой серверный сервер по умолчанию может быть отменено задание при сбое?

4. Да, это мое понимание.