2012-03-15 16 views
0

私は、指数バックオフによる失敗後に遅延する必要があるタスクを再作成しました。しかし時々指数的バックオフがリセットされるべきである - 仕事が最終目標に向かって進歩するならば、遅れは非常に短くなるはずだが、失敗してもそれは待つべきである。したがってジョブは実行され、失敗した場合は2つの異なる障害モードがあります。 1つの障害モードでは、ジョブはすぐに再試行されますが、バックオフが開始されます。他の障害モードでは、ジョブは以前の試行の前の遅延よりも長く(たとえば2倍)遅延する必要があります。Resque-retryによる指数バックオフのリセット

retry_criteria_checkはこれを行うことができるはずですが、私はResque::Plugins::ExponentialBackoffと統合する方法がわかりません。私は、誰かがより良い方法を示唆することができない限り、違う例外を投げてさまざまな失敗モードを伝えると仮定しています。

答えて

1

この種のロジックでは、previous_attempt_delay、previous_attempt_failureを受け入れるようにジョブを変更してから、ジョブ自体の中で新しい再試行が何をすべきかを計算する方が簡単でしょう。次に計算された時間に実行される新しいジョブを作成して(そして2つのパラメータを渡して)バックオフを実行します。

+0

previous_attempt_failureは、前回の失敗のエラータイプであり、一致するものがあるようになります。 – TomDunning

関連する問題