Cykl życia zadania
Asynchroniczne zadania przechodzą przez wiele stanów podczas swojego cyklu życia. Ta strona rejestruje cykl życia zadania od utworzenia do usunięcia.
Po umieszczeniu zadania w kolejce, asynq zarządza zadaniem wewnętrznie, aby zapewnić, że obsługa zostanie wywołana w określonym czasie. Podczas tego procesu zadanie może przechodzić przez różne stany cyklu życia.
Oto lista różnych stanów cyklu życia:
-
Zaplanowane: Zadanie oczekuje na przyszłą obróbkę (dotyczy tylko zadań z opcjami
ProcessAt
lubProcessIn
). - Oczekujące: Zadanie jest gotowe do przetwarzania i zostanie podjęte przez wolnego pracownika.
- Aktywne: Zadanie jest przetwarzane przez pracownika (to znaczy, że obsługa przetwarza zadanie).
- Ponawianie: Pracownik nie może przetworzyć zadania, a zadanie oczekuje na przyszłe ponowne przetworzenie.
- Zarchiwizowane: Zadanie osiągnęło maksymalną liczbę prób ponowienia i jest przechowywane w archiwum celem ręcznej inspekcji.
-
Zakończone: Zadanie zostało pomyślnie przetworzone i zostanie przechowane do momentu wygaśnięcia czasu retencji (dotyczy tylko zadań z opcją
Retention
).
Przyjrzyjmy się różnym stanom cyklu życia na przykładzie.
// Zadanie 1: Zaplanowane do przetwarzania za 24 godziny.
client.Enqueue(task1, asynq.ProcessIn(24*time.Hour))
// Zadanie 2: Umieszczone w kolejce do natychmiastowego przetwarzania.
client.Enqueue(task2)
// Zadanie 3: Umieszczone z opcją retencji.
client.Enqueue(task3, asynq.Retention(2*time.Hour))
W tym przykładzie Zadanie 1
pozostanie w stanie Zaplanowane przez kolejne 24 godziny. Po 24 godzinach przejdzie do stanu Oczekujące a następnie do stanu Aktywne. Jeśli zadanie zostanie pomyślnie przetworzone, dane zadania zostaną usunięte z Redis. Jeśli zadanie nie zostanie pomyślnie przetworzone (to znaczy, że obsługa zwraca błąd lub występuje awaria), zadanie przejdzie do stanu Ponawianie celem późniejszych ponownych prób. Po pewnym czasie, zadanie przejdzie z powrotem do stanu Oczekujące a następnie do stanu Aktywne. Ten cykl będzie trwał, aż zadanie zostanie pomyślnie przetworzone lub wyczerpie próby ponowienia. W ostatnim przypadku zadanie przejdzie do stanu Zarchiwizowane.
W tym przykładzie jedyna różnica między Zadaniem 2
a Zadaniem 1
jest taka, że Zadanie 2
pomija stan Zaplanowane i bezpośrednio przechodzi do stanu Oczekujące.
Zadanie 3
jest umieszczone z opcją retencji na 2 godziny. Oznacza to, że po pomyślnym przetworzeniu przez pracownika, zadanie pozostanie w stanie Zakończone przez 2 godziny przed usunięciem z kolejki. Domyślnie, jeśli zadanie nie ma ustawionej opcji retencji, zostanie usunięte z kolejki natychmiast po zakończeniu.
Poniższy diagram przedstawia przejścia między stanami.
+-------------+ +--------------+ +--------------+ +-------------+
| | | | | | Sukces | |
| Zaplanowane|----------->| Oczekujące |--------->| Aktywne |---------> | Zakończone |
| (Opcjonalne)| | | | | | (Opcjonalne) |
+-------------+ +--------------+ +--------------+ +-------------+
^ | |
| | | Usunięcie
| | Niepowodzenie |
| | V
| |
| |
+------+-------+ | +--------------+
| | | | |
| Ponawianie|<--------------+------->| Zarchiwizowane |
| | | |
+--------------+ +--------------+