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 lub ProcessIn).
  • 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 |
                           |              |                        |              |
                           +--------------+                        +--------------+