Sidekiq重试已用尽,带有参数。

7
我从其他网站上爬取leads,然后在我的网站上激活它们。使用Sidekiq,我每小时运行一个HealthCheckerWorker来检查这些leads是否仍然在其他网站上有效,如果不再有效,就在我的网站上停用这个lead。
有时HealthCheckerWorker会出现错误,例如: bad URI等... 我的困境在于,如果任务失败10次,那么现在在死亡队列中,即使lead在其他网站上已经不存在了,它仍然被认为是活动状态
我认为解决方案是添加sidekiq_retries_exhausted块,如下所示:
sidekiq_retries_exhausted do |lead_id|
  Lead.find(lead_id).deactivate
end

但是根据文档:

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

因此,它只接收message作为参数。当重试次数用尽后,我该如何停用引导?
1个回答

19

该消息是整个作业,包括参数。只需提取参数即可。

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

非常感谢你的工作,做得很棒。顺便说一句,我非常喜欢这个工具,哈哈。 - davegson
作为参考,您可以调用message['args']。 - Jason Axelson
2
你是如何为此编写规格的? - Chris Hough
你是如何为此编写规格的? - Chris Hough

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接