2017-10-27 6 views
1

google-api-python-clientを使用していて、一部の非同期操作でGoogleのアプリケーションエンジンのタスクキューを使用しています。Googleのアプリケーションエンジンのタスクキューで最大再試行回数を処理した後の処理に失敗しました

特定のタスクキューについては、タスクを再試行する最大回数も設定しています(私の場合、再試行が成功する可能性は低いので、制限したい)。

指定された回数のリトライ後でもタスクがまだ失敗しているケースを処理できるハンドラを作成する方法はありますか?

基本的には、再試行の制限が5の場合、5回の再試行が失敗した後、タスクを別のキューに移動し、再試行間隔を長くして再試行できるようにしたい成功するために。 hereから

私は各再試行でX-AppEngineの-TaskExecutionCountヘッダーを使用して、タスクが最後に実行され、これを達成しようとしたときを知るためにいくつかのカスタムロジックを記述することができると信じているが、私は見つけるしようとしていますクリーナーの道があれば。 (DOCから)ところで

X-AppEngineの-TaskExecutionCount指定し、このタスクが以前に実行フェーズ中に失敗した回数。この数には、使用可能なインスタンスの不足による障害は含まれません。

答えて

1

少なくとも現在、あるキューから別のキューにタスクを自動的に移動するサポートはありません。

retry_parameters:

1つのオプションは、同じキューにタスクを保つの再試行の最大数を増やすと(再試行の間の時間のすなわち増加)再試行バックオフポリシーをカスタマイズするretry_parametersを使用することです

オプション。失敗したタスクの再試行を設定します。この追加では、 を使用して、特定のキュー内で失敗した再試行の最大回数を指定することができます( )。再試行の制限時間を設定して試行間隔を制御することもできます。

  • task_retry_limit

    失敗したタスクの再試行の最大数:

    再試行パラメータは、次のサブ要素を含むことができます。 task_age_limitと指定すると、両方の制限に達するまで になるまで、App Engineはタスクを再試行します。 が指定されている場合、タスクは に再試行されません。

  • task_age_limit(プッシュキュー)

    タスクが最初に実行されたときから測定された再試行の期限失敗したタスク、。ユニットは日間 時間、又はDため秒間S、分MHある値は、時間の単位、 続く番号です。たとえば、値5dは、タスクの最初の実行の試行から5日後の の制限を指定します。 をtask_retry_limitと指定した場合、両方の制限に達するまで になるまで、App Engineはタスクを再試行します。それが失敗した後に再試行する前にタスクを待つ

  • min_backoff_seconds(プッシュキュー)

    最小秒数。それが失敗した後に再試行する前にタスクを待つ

  • max_backoff_seconds(プッシュキュー)

    最大秒数。

  • max_doublings(プッシュキュー)

    増加が一定になる前に、失敗したタスクの再試行間隔が倍増される最大回数。 定数は2**max_doublings * min_backoff_seconds**です。

しかし、増加のパターンが緩やかになります - それぞれの障害が発生した後倍増は、あなたが重要な「ステップ」再試行の間の時間の様な増加を得ることができません。それでも、それは追加のコーディングが必要ない十分な解決策である可能性があります。個人的に私はこのアプローチに行きます。

別のアプローチは、その実行が元のタスクと所望の「遅い」ポリシーを再試行している別のキューに、そうであれば、エンキュー新しい対応するタスクの最終的な再試行であるかどうかを決定するために、そのロジックを追加することです。私はこれがあなたがその質問で言及していたものであり、避けたかったのかどうかは分かりません。

+0

1)はい、コードでリトライ回数ロジックを使用しないようにしようとしていました。 2)失敗したタスクと通常のタスクを分けて、より良いコマンドを与えるため、別のキューに移動したいと思います。 – Karthik

関連する問題