重试失败的推送任务

通过任务队列处理的推送任务可能会因多种原因而失败。如果处理程序执行任务失败(并因此返回超出 200–299 范围的任何 HTTP 状态代码),App Engine 会重试该任务,直到成功为止。

默认情况下,为避免因请求过多而导致应用过载,系统会逐步降低重试速率,但会将重试尝试频率安排为最多每小时一次,直至任务成功为止。

重试任务

您可以通过在 queue.yaml 中添加重试参数元素来自定义自己的任务重试方案。通过添加相应的值,您可以指定特定队列中失败任务的最大重试次数。您还可以为重试尝试设置时间限制,控制重试之间的时间间隔。

以下示例演示了各种重试方案:

  • fooqueue 中,从第一次尝试执行算起,任务最多重试七次,最长持续两天。两个限制都达到后,任务将永远失败。
  • barqueue 中,App Engine 会尝试重试任务,线性地增加每次重试之间的时间间隔,直到达到最大退避时间,然后以最大时间间隔无限次重试(因此,请求之间的时间间隔为 10 秒、20 秒、30 秒、…、190 秒、200 秒、200 秒、…)。
  • bazqueue 中,重试时间间隔从 10 秒开始,之后加倍三次,然后线性增加,最后以最大时间间隔无限期重试(因此,请求之间的时间间隔为 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>

后续步骤