2012-03-15 30 views
0

我有需要指数退避失败后延迟resque任务。但有时指数退避应该是复位 - 如果工作让朝最终目标取得进展,延迟应该被重置为很短,但如果它被卡住的失败,应该继续等待。所以这项工作将会运行,如果失败了,会有两种不同的失败模式。在一种失败模式下,工作应该很快重新开始,但随后开始退休。在另一种失败模式下,作业应比上一次尝试之前的延迟延迟更长时间(比如2x)。重置指数退避与Resque重试

看来retry_criteria_check应该可以做到这一点,但我不知道如何将其与Resque::Plugins::ExponentialBackoff整合。我假设我会通过抛出不同的例外来传达不同的失败模式,除非有人能提出更好的方法。

回答

1

使用这种逻辑,将作业更改为接受previous_attempt_delay,previous_attempt_failure,然后计算新作业应该在作业本身内应该可能会更简单。然后,通过建立在计算的时候要执行的新工作做回退(并通过对这些2个PARAMS)。

+0

previous_attempt_failure将是之前失败的错误类型,以便我们有一些匹配的东西。 – TomDunning 2012-03-17 09:53:10