Aufgabenspeicherung

Standardmäßig wird eine Aufgabe nach erfolgreicher Verarbeitung durch den Handler (d. h. Handler.ProcessTask gibt nil zurück) aus der Warteschlange entfernt. Wenn Sie jedoch möchten, dass die Aufgabe nach Abschluss (z. B. zu Inspektionszwecken) in der Warteschlange verbleibt, können Sie eine Aufbewahrungsfrist für die Aufgabe festlegen.

Im folgenden Beispiel wird die Verwendung der Retention-Option veranschaulicht, um anzugeben, dass eine Aufgabe nach Abschluss 24 Stunden lang in der Warteschlange verbleiben soll.

// Setzen Sie die Option beim Initialisieren der Aufgabe.
task := asynq.NewTask("meine_aufgabe", payload, asynq.Retention(24 * time.Hour))

// Alternativ setzen Sie die Option beim Einreihen der Aufgabe.
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))

Nachdem diese Option festgelegt wurde, können Sie die abgeschlossenen Aufgaben über die Befehlszeilenschnittstelle oder die Web-Benutzeroberfläche anzeigen.

Aufgabenergebnis

Wenn Sie während der Aufgabenverarbeitung Daten im Zusammenhang mit der Aufgabe speichern müssen und diese Daten nur während des Lebenszyklus der Aufgabe benötigt werden (d. h. bis die Aufgabe aus der Warteschlange entfernt wird), können Sie die Daten zusammen mit der Aufgabe speichern.

Verwenden Sie ResultWriter, um Daten in Redis zu schreiben und die geschriebenen Daten mit der Aufgabe zu verknüpfen.

Hinweis: Bitte beachten Sie sorgfältig die Menge der in Redis geschriebenen Daten. Wenn eine große Menge an Daten gespeichert werden muss, ist es besser, ein datenträgerbasiertes Speichersystem wie eine SQL-Datenbank zu verwenden.

// Im Handler-Code.
func MyHandler(ctx context.Context, task *asynq.Task) error {
    res, err := DoStuff(ctx, task)
    if err != nil {
        return fmt.Errorf("Fehler bei der Verarbeitung der Aufgabe: %v", err)
    }
    if _, err := task.ResultWriter().Write(res); err != nil {
        return fmt.Errorf("Fehler beim Schreiben des Aufgabenergebnisses: %v", err)
    }
    return nil
}

Wenn Sie die oben gezeigte Retention-Option verwenden, können Sie die Ergebnisdaten über die Befehlszeilenschnittstelle und die Web-Benutzeroberfläche anzeigen. Darüber hinaus können Sie auf die Ergebnisdaten programmgesteuert über die Verwendung von Inspector.GetTaskInfo und Inspector.ListCompletedTasks zugreifen.