Conservazione attività
Per impostazione predefinita, una volta che un'attività è stata elaborata con successo dall'Handler
(cioè, il Handler.ProcessTask
restituisce nil), l'attività verrà rimossa dalla coda. Tuttavia, se si desidera conservare l'attività nella coda dopo il completamento (ad esempio, per scopi di ispezione), è possibile specificare un periodo di conservazione per l'attività.
Di seguito è riportato un esempio dell'uso dell'opzione Retention
per specificare che un'attività dovrebbe essere conservata nella coda per 24 ore dopo il completamento.
// Imposta l'opzione durante l'inizializzazione dell'attività.
task := asynq.NewTask("my_task", payload, asynq.Retention(24 * time.Hour))
// In alternativa, imposta l'opzione durante l'inserimento dell'attività nella coda.
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))
Dopo aver impostato questa opzione, è possibile visualizzare le attività completate utilizzando la CLI o l'interfaccia utente Web.
Risultato dell'attività
Se è necessario memorizzare dati relativi all'attività durante l'elaborazione dell'attività, e se questi dati sono necessari solo durante il ciclo di vita dell'attività (cioè, fino a quando l'attività viene rimossa dalla coda), è possibile memorizzare i dati insieme all'attività.
Utilizzare ResultWriter
per scrivere dati su Redis e associare i dati scritti all'attività.
Nota: Si prega di considerare attentamente la quantità di dati scritti su Redis. Se è necessario memorizzare una grande quantità di dati, è meglio utilizzare un sistema di archiviazione basato su disco come un database SQL.
// Nel codice dell'handler.
func MyHandler(ctx context.Context, task *asynq.Task) error {
res, err := DoStuff(ctx, task)
if err != nil {
return fmt.Errorf("impossibile elaborare l'attività: %v", err)
}
if _, err := task.ResultWriter().Write(res); err != nil {
return fmt.Errorf("impossibile scrivere il risultato dell'attività: %v", err)
}
return nil
}
Se si utilizza l'opzione Retention
come mostrato sopra, sarà possibile visualizzare i dati dei risultati tramite la CLI e l'interfaccia utente Web. Inoltre, è possibile accedere programmaticamente ai dati dei risultati tramite l'uso di Inspector.GetTaskInfo
e Inspector.ListCompletedTasks
.