Ciclo di vita del task

I task asincroni attraversano diversi stati durante il loro ciclo di vita. Questa pagina registra il ciclo di vita di un task dalla creazione all'eliminazione.

Quando si inoltra un task, asynq gestisce internamente il task per garantire che il gestore venga chiamato al momento specificato. Durante questo processo, il task può attraversare diversi stati del ciclo di vita.

Ecco un elenco dei diversi stati del ciclo di vita:

  • Pianificato: Il task è in attesa di essere elaborato in futuro (valido solo per i task con opzioni ProcessAt o ProcessIn).
  • In sospeso: Il task è pronto per essere elaborato e verrà prelevato da un worker inattivo.
  • Attivo: Il task è in fase di elaborazione da parte di un worker (cioè, il gestore sta elaborando il task).
  • Ripetizione: Il worker non è in grado di elaborare il task ed il task è in attesa di un nuovo tentativo futuro.
  • Archiviato: Il task ha raggiunto il numero massimo di tentativi di ripetizione ed è archiviato per ispezione manuale.
  • Completato: Il task è stato elaborato con successo e verrà mantenuto fino a quando il tempo di conservazione scade (valido solo per i task con l'opzione di Retention).

Esaminiamo i diversi stati del ciclo di vita con un esempio.

// Task 1: Pianificato per l'elaborazione tra 24 ore.
client.Enqueue(task1, asynq.ProcessIn(24*time.Hour))

// Task 2: Inoltrato per l'elaborazione immediata.
client.Enqueue(task2)

// Task 3: Inoltrato con opzione di conservazione.
client.Enqueue(task3, asynq.Retention(2*time.Hour))

In questo esempio, Task 1 rimarrà nello stato Pianificato per le prossime 24 ore. Dopo 24 ore, passerà allo stato In sospeso e successivamente allo stato Attivo. Se il task viene elaborato con successo, i dati del task verranno eliminati da Redis. Se il task non viene elaborato correttamente (ovvero, il gestore restituisce un errore o genera un errore irreversibile), il task passerà allo stato Ripetizione per tentativi successivi. Dopo un periodo di tempo, il task tornerà allo stato In sospeso e poi allo stato Attivo. Questo ciclo continuerà fino a quando il task non viene elaborato con successo o esaurisce i tentativi di ripetizione. In quest'ultimo caso, il task passerà allo stato Archiviato.

In questo esempio, l'unica differenza tra Task 2 e Task 1 è che Task 2 salta lo stato Pianificato ed entra direttamente nello stato In sospeso.

Task 3 è inoltrato con un'opzione di conservazione di 2 ore. Ciò significa che dopo che un worker elabora con successo Task 3, il task rimarrà nello stato Completato per 2 ore prima di essere rimosso dalla coda. Per impostazione predefinita, se un task non ha un'opzione di conservazione impostata, verrà rimosso dalla coda immediatamente dopo il completamento.

Il diagramma seguente illustra le transizioni di stato.

+-------------+            +--------------+          +--------------+           +-------------+
|             |            |              |          |              | Successo   |             |
|  Pianificato|----------->|   In sospeso |--------->|    Attivo    |---------> |  Completato |
|  (Opzionale)|            |              |          |              |           |  (Opzionale)|
+-------------+            +--------------+          +--------------+           +-------------+
                                  ^                       |                            |
                                  |                       |                            | Eliminazione
                                  |                       | Fallimento                 |
                                  |                       |                            V
                                  |                       |
                                  |                       |
                           +------+-------+               |        +--------------+
                           |              |               |        |              |
                           |    Ripetizione|<--------------+------->|  Archiviato  |
                           |              |                        |              |
                           +--------------+                        +--------------+