Rétention de tâche

Par défaut, une fois qu'une tâche a été traitée avec succès par le Handler (c'est-à-dire que Handler.ProcessTask renvoie nil), la tâche est retirée de la file d'attente. Cependant, si vous souhaitez conserver la tâche dans la file d'attente après son achèvement (par exemple, à des fins d'inspection), vous pouvez spécifier une période de rétention pour la tâche.

Voici un exemple d'utilisation de l'option Retention pour spécifier qu'une tâche doit être conservée dans la file d'attente pendant 24 heures après son achèvement.

// Définir l'option lors de l'initialisation de la tâche.
task := asynq.NewTask("ma_tache", charge utile, asynq.Retention(24 * time.Hour))

// Ou définir l'option lors de l'enregistrement de la tâche dans la file d'attente.
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))

Après avoir défini cette option, vous devriez pouvoir voir les tâches terminées à l'aide de l'interface en ligne de commande (CLI) ou de l'interface Web.

Résultat de la tâche

Si vous avez besoin de stocker des données liées à la tâche lors du traitement de la tâche, et si ces données ne sont nécessaires que pendant le cycle de vie de la tâche (c'est-à-dire jusqu'à ce que la tâche soit retirée de la file d'attente), vous pouvez stocker les données avec la tâche.

Utilisez ResultWriter pour écrire des données dans redis et associer les données écrites à la tâche.

Remarque : Veuillez bien considérer la quantité de données écrites dans redis. S'il est nécessaire de stocker une grande quantité de données, il est préférable d'utiliser un système de stockage sur disque tel qu'une base de données SQL.

// Dans le code du gestionnaire.
func MonGestionnaire(ctx context.Context, tâche *asynq.Task) error {
    res, err := FaireQuelqueChose(ctx, tâche)
    if err != nil {
        return fmt.Errorf("échec du traitement de la tâche : %v", err)
    }
    if _, err := tâche.ResultWriter().Write(res); err != nil {
        return fmt.Errorf("échec de l'écriture du résultat de la tâche : %v", err)
    }
    return nil
}

Si vous utilisez l'option Retention comme indiqué ci-dessus, vous pourrez voir les données de résultat via l'interface en ligne de commande (CLI) et l'interface Web. De plus, vous pouvez accéder de manière programmée aux données de résultat à travers l'utilisation de Inspector.GetTaskInfo et Inspector.ListCompletedTasks.