重试失败的推送任务

通过任务队列处理的推送任务可能会因多种原因而失败。如果处理程序执行任务失败(并因此返回超出 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 秒、…)。
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

后续步骤