как сделать sidekiq_retries_exhausted доступным по всему миру для всех работников

#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