失敗した push タスクの再試行

タスクキューを介して処理される push タスクは、さまざまな理由で失敗することがあります。ハンドラがタスクの実行に失敗した場合(200~299 以外の HTTP ステータス コードが返された場合)、App Engine は成功するまでタスクを再試行します。

デフォルトでは、アプリケーションが大量のリクエストで過負荷状態になるのを避けるため、再試行速度が徐々に低下し、タスクが成功するまでに 1 時間に最大 1 回繰り返すスケジュールに設定されます。

タスクの再試行

再試行パラメータ要素を queue.yaml に追加することにより、タスク再試行の独自のスキームをカスタマイズできます。この設定では、特定のキューでの失敗したタスクの最大再試行回数を指定できます。再試行の制限時間を設定したり、再試行の間隔を制御したりすることもできます。

次の例に、さまざまな再試行のシナリオを示します。

  • fooqueue では、タスクは最初の試行から 2 日間を期限とし、7 回を上限として再試行されます。両方の上限に達すると、タスクは完全に失敗し、再試行されなくなります。
  • barqueue では、App Engine は、再試行の回数に応じて間隔を長くしながらタスクを再試行し、最大バックオフに達すると、最大間隔で無限に再試行します(リクエストの間隔は 10 秒、20 秒、30 秒、...、190 秒、200 秒、200 秒、... となります)。
  • bazqueue では、再試行間隔は 10 秒から開始し、3 回 2 倍ずつ間隔を長くします。その後は直線的に間隔が広げられます。最終的には、最大間隔で無限に再試行します(リクエストの間隔は 10 秒、20 秒、40 秒、80 秒、160 秒、240 秒、300 秒、300 秒、... となります)。
queue:
- name: fooqueue
  rate: 1/s
  retry_parameters:
    task_retry_limit: 7
    task_age_limit: 2d
- name: barqueue
  rate: 1/s
  retry_parameters:
    min_backoff_seconds: 10
    max_backoff_seconds: 200
    max_doublings: 0
- name: bazqueue
  rate: 1/s
  retry_parameters:
    min_backoff_seconds: 10
    max_backoff_seconds: 300
    max_doublings: 3

次のステップ