Ciclo de vida de la tarea

Las tareas asíncronas pasan por múltiples estados durante su ciclo de vida. Esta página registra el ciclo de vida de una tarea desde su creación hasta su eliminación.

Cuando encolas una tarea, asynq gestiona internamente la tarea para asegurar que el controlador sea llamado en el momento especificado. Durante este proceso, la tarea puede pasar por diferentes estados de ciclo de vida.

Aquí tienes una lista de diferentes estados de ciclo de vida:

  • Programada: La tarea está esperando para ser procesada en el futuro (solo aplicable a tareas con las opciones ProcessAt o ProcessIn).
  • Pendiente: La tarea está lista para ser procesada y será tomada por un trabajador inactivo.
  • Activa: La tarea está siendo procesada por un trabajador (es decir, el controlador está procesando la tarea).
  • Reintento: El trabajador no puede procesar la tarea y la tarea está esperando un reintento futuro.
  • Archivada: La tarea ha alcanzado el máximo de intentos de reintento y está almacenada en el archivo para inspección manual.
  • Completada: La tarea ha sido procesada con éxito y permanecerá hasta que expire el tiempo de retención (solo aplicable a tareas con la opción de Retention).

Veamos los diferentes estados de ciclo de vida con un ejemplo.

// Tarea 1: Programada para ser procesada en 24 horas.
client.Enqueue(task1, asynq.ProcessIn(24*time.Hour))

// Tarea 2: Encolada para procesamiento inmediato.
client.Enqueue(task2)

// Tarea 3: Encolada con opción de retención.
client.Enqueue(task3, asynq.Retention(2*time.Hour))

En este ejemplo, Tarea 1 permanecerá en el estado Programada durante las próximas 24 horas. Después de 24 horas, pasará al estado Pendiente y luego al estado Activa. Si la tarea se procesa con éxito, los datos de la tarea se eliminarán de Redis. Si la tarea no se procesa con éxito (es decir, el controlador devuelve un error o entra en pánico), la tarea pasará al estado Reintento para intentos posteriores. Después de un período de tiempo, la tarea volverá al estado Pendiente y luego al estado Activa. Este ciclo continuará hasta que la tarea se procese con éxito o agote los intentos de reintento. En este último caso, la tarea pasará al estado Archivada.

En este ejemplo, la única diferencia entre Tarea 2 y Tarea 1 es que Tarea 2 omite el estado Programada y entra directamente en el estado Pendiente.

Tarea 3 es encolada con una opción de retención de 2 horas. Esto significa que después de que un trabajador procese con éxito Tarea 3, la tarea permanecerá en el estado Completada durante 2 horas antes de ser eliminada de la cola. Por defecto, si una tarea no tiene una opción de retención establecida, se eliminará de la cola inmediatamente después de completarse.

El siguiente diagrama ilustra las transiciones de estado.

+-------------+            +--------------+          +--------------+           +-------------+
|             |            |              |          |              | Éxito     |             |
| Programada  |----------->|   Pendiente  |--------->|    Activa    |---------> |  Completada |
| (Opcional)  |            |              |          |              |           |  (Opcional) |
+-------------+            +--------------+          +--------------+           +-------------+
                                  ^                       |                            |
                                  |                       |                            | Eliminación
                                  |                       | Fracasada                  |
                                  |                       |                            V
                                  |                       |
                                  |                       |
                           +------+-------+               |        +--------------+
                           |              |               |        |              |
                           |   Reintento  |<--------------+------->|   Archivada  |
                           |              |                        |              |
                           +--------------+                        +--------------+