Повторить задание sidekiq, если оно находится в очереди на рельсах
Я хочу написать задание cron, которое извлекает задание sidekiq из мертвой очереди и повторяет его, поскольку мы можем сделать это из веб-интерфейса sidekiq, я хочу сделать то же самое с помощью кода.
1 ответ
Доступ к мертвой очереди осуществляется с помощью Sidekiq::DeadSet, у которого есть retry_all
метод.
Sidekiq::DeadSet.new.retry_all
Это тонкая оболочка для перебора каждого задания в очереди и вызова retry
. SideKiq::DeadSet является перечислимым, поэтому вы можете использовать такие методы, какselect
а также each
. На вики-странице есть хороший пример.
ds = Sidekiq::DeadSet.new
# Retry only jobs of FixedWorker class whose first argument is 123.
ds.select { |job|
job.klass == 'FixedWorker' && job.args[0] == 123
}.map(&:retry)