Zachowanie zadania
Domyślnie, po pomyślnym przetworzeniu zadania przez Handler
(tj. gdy Handler.ProcessTask
zwraca nil), zadanie zostanie usunięte z kolejki. Jeśli jednak chcesz, aby zadanie pozostało w kolejce po zakończeniu (np. dla celów inspekcyjnych), możesz określić okres przechowywania dla zadania.
Poniżej znajduje się przykład użycia opcji Retention
, aby określić, że zadanie powinno pozostać w kolejce przez 24 godziny po zakończeniu.
// Ustaw opcję podczas inicjalizacji zadania.
task := asynq.NewTask("moje_zadanie", dane, asynq.Retention(24 * time.Hour))
// Opcjonalnie, ustaw opcję podczas umieszczania zadania w kolejce.
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))
Po ustawieniu tej opcji, powinieneś móc zobaczyć ukończone zadania za pomocą interfejsu wiersza poleceń (CLI) lub interfejsu internetowego (Web UI).
Wynik zadania
Jeśli musisz przechować pewne dane związane z zadaniem podczas jego przetwarzania, a te dane są potrzebne tylko w trakcie cyklu życia zadania (tj. do momentu usunięcia zadania z kolejki), możesz przechować dane razem z zadaniem.
Użyj ResultWriter
, aby zapisać dane w Redis i powiązać zapisane dane z zadaniem.
Uwaga: Prosimy o dokładne rozważenie ilości danych zapisywanych w Redis. Jeśli trzeba przechować dużą ilość danych, lepiej jest skorzystać z systemu przechowywania danych opartego na dysku, takiego jak baza danych SQL.
// W kodzie obsługi.
func MojaObsługa(ctx context.Context, task *asynq.Task) error {
res, err := ZróbCoś(ctx, task)
if err != nil {
return fmt.Errorf("nie udało się przetworzyć zadania: %v", err)
}
if _, err := task.ResultWriter().Write(res); err != nil {
return fmt.Errorf("nie udało się zapisać wyniku zadania: %v", err)
}
return nil
}
Jeśli użyjesz opcji Retention
, jak pokazano powyżej, będziesz mógł zobaczyć dane wynikowe za pomocą interfejsu wiersza poleceń (CLI) i interfejsu internetowego (Web UI). Dodatkowo, wynikowe dane będą dostępne programistycznie poprzez użycie Inspector.GetTaskInfo
i Inspector.ListCompletedTasks
.