Retención de tareas
De forma predeterminada, una vez que una tarea es procesada con éxito por el Handler
(es decir, el Handler.ProcessTask
devuelve nil), la tarea se eliminará de la cola. Sin embargo, si deseas que la tarea se retenga en la cola después de completarse (por ejemplo, para fines de inspección), puedes especificar un período de retención para la tarea.
A continuación se muestra un ejemplo de cómo usar la opción Retention
para especificar que una tarea debe retenerse en la cola durante 24 horas después de completarse.
// Establecer la opción al inicializar la tarea.
task := asynq.NewTask("mi_tarea", carga, asynq.Retention(24 * time.Hour))
// Como alternativa, establecer la opción al encolar la tarea.
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))
Después de establecer esta opción, deberías poder ver las tareas completadas utilizando la CLI o la interfaz de usuario web.
Resultado de la tarea
Si necesitas almacenar algunos datos relacionados con la tarea durante su procesamiento, y si estos datos solo son necesarios durante el ciclo de vida de la tarea (es decir, hasta que la tarea se elimine de la cola), puedes almacenar los datos junto con la tarea.
Utiliza ResultWriter
para escribir datos en redis y asociar los datos escritos con la tarea.
Nota: Por favor, considera cuidadosamente la cantidad de datos escritos en redis. Si se necesita almacenar una gran cantidad de datos, es mejor utilizar un sistema de almacenamiento basado en disco, como una base de datos SQL.
// En el código del handler.
func MiHandler(ctx context.Context, tarea *asynq.Task) error {
res, err := HacerAlgo(ctx, tarea)
if err != nil {
return fmt.Errorf("error al procesar la tarea: %v", err)
}
if _, err := tarea.ResultWriter().Write(res); err != nil {
return fmt.Errorf("error al escribir el resultado de la tarea: %v", err)
}
return nil
}
Si utilizas la opción Retention
como se muestra arriba, podrás ver los datos del resultado a través de la CLI y la interfaz de usuario web. Además, podrás acceder programáticamente a los datos del resultado mediante el uso de Inspector.GetTaskInfo
y Inspector.ListCompletedTasks
.