我在Rails应用程序中使用Sidekiq,并且有大约30个工作人员根据用户在Rails应用程序中单击的任务随机顺序启动。有时,Sidekiq工作失败,我必须关闭Sidekiq并手动调查错误,从而中断所有工作人员(由该用户和任何其他用户发起)
我刚刚实现了一个中间件,这样我就可以在每次sidekiq工作失败时调用一个方法;但是,现在我想知道是否有一种方法可以在不同的队列中重新运行该作业(假设为"retry_queue")。
现在,我的sidekiq员工是这样开始的:
class TestingWorker
include Sidekiq::Worker
sidekiq_options queue: Rails.env.to_sym
这基本上使用运行环境的任何队列(例如开发或生产)。然而,我不确定如何完成我的目标给定这个或任何其他设置。
我的问题是:
- 如何将失败的sidekiq作业从捕获失败的sidekiq工作者的中间件方法重定向到另一个队列?
- 重定向到另一个队列后,我如何重新设计sidekiq作业来理解这一点?
理想情况下,如果我能改变这个:
sidekiq_options queue: Rails.env.to_sym
变成这样:
sidekiq_options queue: [something here].include? "retry_queue" ? :retry_queue : Rails.env.to_sym
如有任何意见或建议,不胜感激。
所有重试失败的作业将进入Web UI中的dead set和dead选项卡。参见错误处理wiki页面。