Aufgabenlebenszyklus
Asynchrone Aufgaben durchlaufen während ihres Lebenszyklus mehrere Zustände. Diese Seite protokolliert den Lebenszyklus einer Aufgabe von der Erstellung bis zur Löschung.
Wenn Sie eine Aufgabe in die Warteschlange stellen, verwaltet asynq die Aufgabe intern, um sicherzustellen, dass der Handler zum angegebenen Zeitpunkt aufgerufen wird. Während dieses Prozesses kann die Aufgabe verschiedene Lebenszykluszustände durchlaufen.
Hier ist eine Liste der verschiedenen Lebenszykluszustände:
-
Geplant: Die Aufgabe wartet auf zukünftige Verarbeitung (nur für Aufgaben mit den Optionen
ProcessAt
oderProcessIn
). - Ausstehend: Die Aufgabe ist zur Verarbeitung bereit und wird von einem freien Worker abgeholt.
- Aktiv: Die Aufgabe wird von einem Worker verarbeitet (d. h. der Handler verarbeitet die Aufgabe).
- Wiederholung: Der Worker ist nicht in der Lage, die Aufgabe zu verarbeiten, und die Aufgabe wartet auf einen zukünftigen Wiederholungsversuch.
- Archiviert: Die Aufgabe hat die maximale Anzahl von Wiederholungsversuchen erreicht und wird im Archiv zur manuellen Überprüfung gespeichert.
-
Abgeschlossen: Die Aufgabe wurde erfolgreich verarbeitet und bleibt bis zum Ablauf der Aufbewahrungsfrist erhalten (nur für Aufgaben mit der
Retention
-Option).
Schauen wir uns die verschiedenen Lebenszykluszustände anhand eines Beispiels an.
// Aufgabe 1: Für die Verarbeitung in 24 Stunden geplant.
client.Enqueue(aufgabe1, asynq.ProcessIn(24*time.Hour))
// Aufgabe 2: Für die sofortige Verarbeitung in die Warteschlange gestellt.
client.Enqueue(aufgabe2)
// Aufgabe 3: Mit Aufbewahrungsoption in die Warteschlange gestellt.
client.Enqueue(aufgabe3, asynq.Retention(2*time.Hour))
In diesem Beispiel wird Aufgabe 1
in dem Geplant Zustand für die nächsten 24 Stunden verbleiben. Nach 24 Stunden wird sie in den Ausstehend Zustand übergehen und dann in den Aktiv Zustand. Wenn die Aufgabe erfolgreich verarbeitet wird, werden die Aufgabendaten aus Redis gelöscht. Wenn die Aufgabe nicht erfolgreich verarbeitet wird (d. h. der Handler gibt einen Fehler zurück oder befindet sich in einem Panikzustand), wird die Aufgabe in den Wiederholungs Zustand übergehen, um später erneut zu versuchen. Nach einer gewissen Zeit wird die Aufgabe wieder in den Ausstehend Zustand und dann in den Aktiv Zustand übergehen. Dieser Zyklus wird fortgesetzt, bis die Aufgabe erfolgreich verarbeitet wird oder die Wiederholungsversuche erschöpft sind. In letzterem Fall wird die Aufgabe in den Archiviert Zustand übergehen.
Im vorliegenden Beispiel besteht der einzige Unterschied zwischen Aufgabe 2
und Aufgabe 1
darin, dass Aufgabe 2
den Geplant Zustand überspringt und direkt in den Ausstehend Zustand übergeht.
Aufgabe 3
wird mit einer Aufbewahrungsoption von 2 Stunden in die Warteschlange gestellt. Das bedeutet, dass nach erfolgreicher Verarbeitung durch einen Worker die Aufgabe für 2 Stunden im Abgeschlossen Zustand bleibt, bevor sie aus der Warteschlange entfernt wird. Standardmäßig wird eine Aufgabe ohne gesetzte Aufbewahrungsoption unmittelbar nach Abschluss aus der Warteschlange entfernt.
Das folgende Diagramm zeigt die Zustandsübergänge.
+-------------+ +--------------+ +--------------+ +-------------+
| | | | | | Erfolg | |
| Geplant |----------->| Ausstehend |--------->| Aktiv |---------> | Abgeschlossen|
| (Optional) | | | | | | (Optional) |
+-------------+ +--------------+ +--------------+ +-------------+
^ | |
| | | Löschung
| | Fehlgeschlagen |
| | V
| |
| |
+------+-------+ | +--------------+
| | | | |
| Wiederholung|<--------------+------->| Archiviert |
| | | |
+--------------+ +--------------+