Cómo reintentar tareas de aplicaciones en cola fallidas

Las tareas de aplicaciones que se procesan a través de una lista de tareas en cola pueden fallar por muchas razones. Si un controlador no puede ejecutar una tarea (y, por lo tanto, muestra cualquier código de estado HTTP fuera del rango 200–299), App Engine vuelve a intentar la tarea hasta que se ejecute correctamente. De manera predeterminada, el sistema reduce de forma gradual la tasa de reintentos para no saturar la aplicación con demasiadas solicitudes. Sin embargo, el tiempo de espera máximo entre un intento y otro hasta que se pueda ejecutar la tarea es de una hora.

Cómo reintentar tareas

Para personalizar tu propio esquema de reintentos de tareas, agrega el elemento de parámetros de reintento en queue.yaml. Esto te permite especificar la cantidad máxima de veces que se reintentarán las tareas fallidas en una cola específica. También puedes establecer un límite de tiempo para reintentar y controlar el intervalo entre intentos.

En el ejemplo siguiente se muestran varias situaciones de reintento:

  • En fooqueue, las tareas se reintentan hasta siete veces y hasta dos días desde el primer intento de ejecución. Una vez que se pasan ambos límites, la tarea falla permanentemente.
  • En barqueue, App Engine reintenta las tareas aumentando el intervalo entre cada reintento de manera lineal hasta alcanzar el valor de retirada máximo, y sigue tratando indefinidamente cuando alcanza 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, luego se duplica tres veces y después aumenta de forma lineal hasta alcanzar el valor máximo, el cual se sigue repitiendo indefinidamente (por lo que los intervalos entre solicitudes son 10 s, 20 s, 40 s, 80 s, 160 s, 240 s, 300 s, 300 s…).
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

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Entorno estándar de App Engine para Go