在Sidekiq重试之前(或期间)运行回调

时间:2019-07-18 18:00:21

标签: ruby-on-rails ruby backgroundworker sidekiq

我希望在对Sidekiq worker作业进行重试之前(或何时)运行回调。我们将作业的状态存储为属性(排队,执行,完成等),并且重试不会自动重置此状态。我需要一种方法来运行回调,以便在重试作业进入队列之前将重试作业的状态设置回queued。例如:

before_retry do 
  self.status = "queued"
end

我阅读了另一篇文章(Sidekiq Pro callback when batch is retried?),该文章建议使用某种服务器中间件来检测重试并运行回调,但是我不完全知道这种方法是否可行,因为我觉得到那时重试已经在排队了任何中间件都能抓住它。还有其他选择吗?预先感谢!

1 个答案:

答案 0 :(得分:1)

rescue内的perform起作用吗?

def perform
  ...
rescue YourException
  self.status = "queued"
  raise
end

raise再次执行,以便重试作业。