我有resque任务,需要在失败后延迟指数退避。但有时指数退避应该重置 - 如果工作朝着最终目标前进,延迟应该重置为非常短,但如果它失败了,它应该继续等待。因此作业将运行,如果失败,则有两种不同的故障模式。在一种故障模式下,应该很快再次重试该作业,然后开始退避。在另一种故障模式中,作业应该比上一次尝试之前的延迟延迟更长时间(比如说2倍)。
似乎retry_criteria_check
应该可以执行此操作,但我不确定如何将其与Resque::Plugins::ExponentialBackoff
集成。我假设我会通过抛出不同的异常来传达不同的失败模式,除非有人能提出更好的方法。
答案 0 :(得分:1)
使用这种逻辑,更改作业以接受previous_attempt_delay,previous_attempt_failure然后计算作业本身内的新重试应该更简单。然后通过创建要在计算时间执行的新作业来执行后退(并传递这两个参数)。