失敗した 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 秒、... となります)。
  <?xml version="1.0" encoding="utf-8"?>
  <queue-entries>
    <queue>
      <name>fooqueue</name>
      <rate>1/s</rate>
      <retry-parameters>
        <task-retry-limit>7</task-retry-limit>
        <task-age-limit>2d</task-age-limit>
      </retry-parameters>
    </queue>
    <queue>
      <name>barqueue</name>
      <rate>1/s</rate>
      <retry-parameters>
        <min-backoff-seconds>10</min-backoff-seconds>
        <max-backoff-seconds>200</max-backoff-seconds>
        <max-doublings>0</max-doublings>
      </retry-parameters>
    </queue>
    <queue>
      <name>bazqueue</name>
      <rate>1/s</rate>
      <retry-parameters>
        <min-backoff-seconds>10</min-backoff-seconds>
        <max-backoff-seconds>300</max-backoff-seconds>
        <max-doublings>3</max-doublings>
      </retry-parameters>
    </queue>
  </queue-entries>

次のステップ