Как получить повторное задание sidekiq после его повторного появления на панели инструментов?
Кажется, что у меня есть работа, которая терпит неудачу, но когда она терпит неудачу, она все еще сохраняется, а затем создает другую идентичную работу, как она сама. Обратите внимание, что на моем скриншоте верхний и нижний элементы совпадают, аргументы "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
Вы можете проверить больше информации здесь