Как получить повторное задание sidekiq после его повторного появления на панели инструментов?

Кажется, что у меня есть работа, которая терпит неудачу, но когда она терпит неудачу, она все еще сохраняется, а затем создает другую идентичную работу, как она сама. Обратите внимание, что на моем скриншоте верхний и нижний элементы совпадают, аргументы "836898". Это какая-то конфигурация, которую мне нужно изменить?

Я имею в виду повторяющиеся записи, не обязательно отключающие повторные попытки.

Аргументы 836898 терпят неудачу

3 ответа

Решение

В Retries есть две записи, потому что это две разные работы. Вы можете создавать "идентичные" задания (с одинаковым классом и аргументами), которые отличаются только внутренним идентификатором задания.

Я думаю, что вы должны сначала включить gem 'sidekiq-unique-jobs'

Тогда ваш работник должен выглядеть так

class CleanupWorker
  include Sidekiq::Worker
  sidekiq_options queue: :cleanup, unique: :until_executed, retry: 4, failures: :exhausted, backtrace: true

  sidekiq_retry_in do |count|
    10 * (count + 1)
  end

  def perform(args)
  end
end

unique: :until_executed это означает, что задание должно быть уникальным, если оно все еще находится в очереди или выполняется. комбинация между retries: 4 а также unique: :until_executed сделает свое дело. Потому что, насколько я знаю, когда происходит сбой задания, если повторные попытки не являются ложными, то задание вернется в очередь.

вот ссылка на эту уникальную работу Gem Repo

NickM ответ правильный. Однако, это отключит повторные попытки для всех работников sidekiq. В зависимости от каждого случая я рекомендую отключить его в каждом классе, например:

class NonRetryableWorker
  include Sidekiq::Worker
  sidekiq_options retry: false

  def perform
  end
end

Или, возможно, просто ограничьте количество повторов, например:

class LessRetryableWorker
  include Sidekiq::Worker
  sidekiq_options retry: 5

  def perform
  end
end

Вы можете проверить больше информации здесь

Другие вопросы по тегам