【发布时间】:2017-03-07 16:41:15
【问题描述】:
由于某些逻辑错误,我的 sidekiq 作业失败。该作业将重试多少次?失败的工作去哪儿了?失败的作业会放回redis的队列中吗?
另外,sidekiq 流程到底是什么? sidekiq 如何启动一个进程来使作业入队,而另一个进程使作业出队?高层发生了什么?
【问题讨论】:
标签: sidekiq
由于某些逻辑错误,我的 sidekiq 作业失败。该作业将重试多少次?失败的工作去哪儿了?失败的作业会放回redis的队列中吗?
另外,sidekiq 流程到底是什么? sidekiq 如何启动一个进程来使作业入队,而另一个进程使作业出队?高层发生了什么?
【问题讨论】:
标签: sidekiq
并非所有问题的答案,但一些有用的信息:
来自 sidekiq Wiki:“如果您在 25 次重试(大约 21 天)内未修复错误,Sidekiq 将停止重试并将您的作业移至死作业队列。您可以修复错误并重试在接下来的 6 个月内随时使用 Web UI 手动作业...." - (https://github.com/mperham/sidekiq/wiki/Error-Handling#best-practices)
如果您想在 you-domain/sidekiq(或您设置的任何位置)实时监控作业,请阅读如何设置路线:https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting#sidekiq-web-does-not-render-correctly-in-production-but-works-fine-in-development
为了终止开发中失败的作业,我从 rails 控制台运行 $redis.flushdb。不过,这将取消所有排队的作业。我从来不需要杀死一个人,但我相信这是有可能的。
您可以通过此 Wiki 页面中的选项配置作业重试:https://github.com/mperham/sidekiq/wiki/Error-Handling#configuration
例子:
sidekiq_options :retry => 5 # Only five retries and then to the Dead Job Queue
为了避免出现多个入门级问题,请阅读最佳实践页面:https://github.com/mperham/sidekiq/wiki/Best-Practices 特别注意点:2。使您的工作具有幂等性和事务性
总的来说,他们有非常好的 wiki,可以回答大多数问题。
【讨论】: