通过任务队列处理的推送任务可能会因多种原因而失败。如果处理程序执行任务失败(并因此返回超出 200–299 范围的任何 HTTP 状态代码),App Engine 会重试该任务,直到成功为止。
默认情况下,为避免因请求过多而导致应用过载,系统会逐步降低重试速率,但会将重试尝试频率安排为最多每小时一次,直至任务成功为止。
重试任务
您可以通过在
中添加重试参数元素来自定义自己的任务重试方案。通过添加相应的值,您可以指定特定队列中失败任务的最大重试次数。您还可以为重试尝试设置时间限制,控制重试之间的时间间隔。queue.xml
以下示例演示了各种重试方案:
- 在
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>
后续步骤
- 详细了解任务队列参数。