当我们重新启动或部署时,我们会在失败的队列中使用Resque::TermException (SIGTERM)
或获得许多 Resque 作业Resque::DirtyExit
。
我们TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10
在 Procfile 中使用新的,所以我们的工作行看起来像:
worker: TERM_CHILD=1 RESQUE_TERM_TIMEOUT=10 bundle exec rake environment resque:work QUEUE=critical,high,low
我们还使用resque-retry
了我认为可能会自动重试这两个异常的方法?但似乎不是。
所以我猜有两个问题:
- 我们可以在每个作业中手动救援
Resque::TermException
,并使用它来重新安排作业。但是有没有一种干净的方法可以为所有工作做到这一点?甚至是猴子补丁。 - resque-retry 不应该自动重试这些吗?你能想出什么理由不这样做吗?
谢谢!
编辑:让所有工作在 10 秒内完成似乎在规模上是不合理的。似乎需要一种方法来在运行 Resque::DirtyExit 异常时自动重新排队这些作业。