Las tareas push que se procesan a través de una cola de tareas pueden fallar por muchos motivos. Si un controlador no puede ejecutar una tarea (y, por lo tanto, devuelve un código de estado HTTP que no está entre 200 y 299), App Engine vuelve a intentar ejecutar la tarea hasta que se complete correctamente.
De forma predeterminada, el sistema reduce gradualmente la frecuencia de reintentos para evitar que tu aplicación se sobrecargue con demasiadas solicitudes, pero programa los reintentos para que se repitan como máximo una vez por hora hasta que la tarea se complete correctamente.
Reintentar tareas
Puedes personalizar tu propio esquema para reintentar tareas añadiendo el elemento retry
parameters
en
. Esta adición te permite especificar el número máximo de veces que se deben volver a intentar las tareas fallidas en una cola específica. También puedes definir un límite de tiempo para los intentos y controlar el intervalo entre ellos.queue.yaml
En el siguiente ejemplo se incluyen distintas situaciones de reintento:
- En
fooqueue
, las tareas se vuelven a intentar hasta siete veces y durante un máximo de dos días desde el primer intento de ejecución. Una vez superados ambos límites, se produce un error permanente. - En
barqueue
, App Engine intenta volver a ejecutar las tareas, aumentando el intervalo de forma lineal entre cada reintento hasta alcanzar el tiempo de espera máximo y volviendo a intentar indefinidamente en el intervalo máximo (por lo que los intervalos entre solicitudes son 10 s, 20 s, 30 s, ..., 190 s, 200 s, 200 s, ...). - En
bazqueue
, el intervalo de reintento comienza en 10 s, después se duplica tres veces, aumenta de manera lineal y, por último, se reintenta indefinidamente en el intervalo máximo (por lo que los intervalos entre solicitudes son 10 s, 20 s, 40 s, 80 s, 160 s, 240 s, 300 s, 300 s, etc.).
<?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>