sidekiq重试用尽论证

时间:2014-10-06 14:11:51

标签: ruby-on-rails ruby sidekiq

我从其他网站抓取leads,然后激活。使用Sidekiq我每小时运行HealthCheckerWorker停用我网站上的潜在客户,除非它仍在其他网站上运行。

有时HealthCheckerWorker会抛出错误,iE:bad URI等等......我的困境在于,如果作业失败了10次,现在在死亡作业队列中,lead仍然被认为是活跃的,虽然它可能已经在其他网站上消失了。

我认为解决方案是添加sidekiq_retries_exhausted块,如下所示:

sidekiq_retries_exhausted do |lead_id|
  Lead.find(lead_id).deactivate
end

但正如docs:

中所定义的那样
  

钩子接收排队的消息作为参数。在Sidekiq将作业移动到DJQ之前调用此挂钩。

因此它只将message作为参数。如何在重试耗尽后停用线索?

1 个答案:

答案 0 :(得分:8)

消息是整个工作,包括参数。拔出参数。

sidekiq_retries_exhausted do |msg|
  lead_id = msg['args'].first
  Lead.find(lead_id).deactivate
end