#ruby-on-rails #ruby #middleware #sidekiq
Вопрос:
поэтому я хочу реализовать sidekiq_retries_exhausted таким образом, чтобы он автоматически срабатывал при неудачных попытках во всем мире, и это поведение должно быть для всех работников в моей кодовой базе в настоящее время я должен писать sidekiq_retries_exhausted каждый раз в каждом работнике, но я хочу понять, есть ли способ, чтобы sidekiq_retries_exhausted срабатывал при неудачных попытках, и мне не нужно писать эту функцию на каждом работнике
короче говоря, я хочу перезаписать локальный sidekiq_retries_exhausted и сделать его глобально доступным, как своего рода промежуточное программное обеспечение, чтобы оно автоматически срабатывало, когда работник не выполнял все повторные попытки, и мне не нужно писать это в каждом работнике
в настоящее время это реализовано так в каждом работнике
sidekiq_retries_exhausted do |msg, error|
AlertOnRetriesExhaustedUtils.send_alert_on_retries_exhausted(msg, error)
end
Ответ №1:
В sidekiq v5.1 введен глобальный обратный death_handlers
вызов, когда задание умирает
Обратный вызов sidekiq_retries_exhausted специфичен для рабочего класса. Начиная с версии v5.1, Sidekiq также может запускать глобальный обратный вызов при завершении задания:
# this goes in your initializer
Sidekiq.configure_server do |config|
config.death_handlers << ->(job, ex) do
puts "Uh oh, #{job['class']} #{job["jid"]} just died with error #{ex.message}."
end
end