Cycle de vie de la tâche
Les tâches asynchrones passent par plusieurs états au cours de leur cycle de vie. Cette page enregistre le cycle de vie d'une tâche de sa création à sa suppression.
Lorsque vous mettez une tâche en file d'attente, asynq gère la tâche en interne pour s'assurer que le gestionnaire est appelé au moment spécifié. Pendant ce processus, la tâche peut passer par différents états de cycle de vie.
Voici une liste des différents états du cycle de vie :
-
Planifié : La tâche attend un traitement futur (applicable uniquement aux tâches avec les options
ProcessAt
ouProcessIn
). - En attente : La tâche est prête pour le traitement et sera récupérée par un travailleur inactif.
- Actif : La tâche est en train d'être traitée par un travailleur (c'est-à-dire que le gestionnaire traite la tâche).
- Nouvel essai : Le travailleur est incapable de traiter la tâche, et la tâche attend un nouvel essai futur.
- Archivé : La tâche a atteint le nombre maximum de tentatives de nouvel essai et est stockée dans les archives pour inspection manuelle.
-
Terminé : La tâche a été traitée avec succès et sera conservée jusqu'à l'expiration du délai de rétention (applicable uniquement aux tâches avec l'option
Retention
).
Regardons les différents états du cycle de vie avec un exemple.
// Tâche 1 : Planifiée pour un traitement dans 24 heures.
client.Enqueue(task1, asynq.ProcessIn(24*time.Hour))
// Tâche 2 : Mise en file d'attente pour un traitement immédiat.
client.Enqueue(task2)
// Tâche 3 : Mise en file d'attente avec option de rétention.
client.Enqueue(task3, asynq.Retention(2*time.Hour))
Dans cet exemple, Tâche 1
restera dans l'état Planifié pour les 24 prochaines heures. Après 24 heures, elle passera à l'état En attente puis à l'état Actif. Si la tâche est traitée avec succès, les données de la tâche seront supprimées de Redis. Si la tâche n'est pas traitée avec succès (c'est-à-dire si le gestionnaire renvoie une erreur ou plante), la tâche passera à l'état Nouvel essai pour de futurs essais. Après un certain laps de temps, la tâche reviendra à l'état En attente puis à l'état Actif. Ce cycle continuera jusqu'à ce que la tâche soit traitée avec succès ou épuise les tentatives de nouvel essai. Dans ce dernier cas, la tâche passera à l'état Archivé.
Dans cet exemple, la seule différence entre Tâche 2
et Tâche 1
est que Tâche 2
saute l'état Planifié et entre directement dans l'état En attente.
Tâche 3
est mise en file d'attente avec une option de rétention de 2 heures. Cela signifie qu'après qu'un travailleur a traité avec succès Tâche 3
, la tâche restera dans l'état Terminé pendant 2 heures avant d'être supprimée de la file d'attente. Par défaut, si une tâche n'a pas d'option de rétention définie, elle sera supprimée de la file d'attente immédiatement après son achèvement.
Le schéma ci-dessous illustre les transitions d'état.
+-------------+ +--------------+ +--------------+ +-------------+
| | | | | | Succès | |
| Planifié |----------->| En attente |--------->| Actif |---------> | Terminé |
| (Optionnel)| | | | | | (Optionnel)|
+-------------+ +--------------+ +--------------+ +-------------+
^ | |
| | | Suppression
| | Échec |
| | V
| |
| |
+------+-------+ | +--------------+
| | | | |
| Nouvel |<--------------+------->| Archivé |
| essai | | |
+--------------+ +--------------+