首页 > 解决方案 > 如何使 sidekiq_retries_exhausted 在全球范围内可供所有工人使用

问题描述

所以我想以这样一种方式实现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

标签: ruby-on-railsrubymiddlewaresidekiq

解决方案


在 sidekiq v5.1 中引入了death_handlers工作死亡时的全局回调

死亡通知

sidekiq_retries_exhausted 回调特定于 Worker 类。从 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

推荐阅读