Motyw
Kolejka Zadań Asynchronicznych (Task Queue)
Moduł Kolejki Zadań Asynchronicznych (automation_queue) w platformie Ammonly odpowiada za zarządzanie, monitorowanie i realizację długotrwałych operacji w tle.
Spis treści
- 1. Istota kolejki asynchronicznej
- 2. Struktura rekordu zadania w kolejce
- 3. Stany i cykl życia zadania
- 4. Mechanizm Heartbeat i ochrona przed awarią
- 5. Monitoring i zarządzanie z poziomu panelu
1. Istota kolejki asynchronicznej
Operacje wymagające intensywnego przetwarzania danych (masowe aktualizacje, przeliczanie bilansów, importy plików, generowanie zbiorczych raportów) są delegowane do tabeli kolejki a_mod_queue_records. Dzięki temu interfejs użytkownika pozostaje w pełni responsywny i nie blokuje połączeń HTTP.
mermaid
flowchart LR
UserAction[Żądanie użytkownika / akcja masowa] --> Enqueue[Zapis zadania w a_mod_queue_records: waiting]
Enqueue --> ImmediateHTTP[Natychmiastowa odpowiedź HTTP 202 Accepted]
QueueWorker[CRON Task: queue_worker] --> Fetch[Pobranie zadania: reserved]
Fetch --> Process[Przetwarzanie paczek & aktualizacja progress_percent]
Process --> Complete[Oznaczenie zadania: done]2. Struktura rekordu zadania w kolejce
Tabela a_mod_queue_records przechowuje kompletne metadane zadania:
| Pole | Typ | Opis |
|---|---|---|
label | VARCHAR(255) | Tytuł i opis zadania wyświetlany użytkownikowi. |
job_type | VARCHAR(64) | Typ zadania (np. bulk_update, recalculate_wbs, import_data). |
status | VARCHAR(32) | Status: waiting (oczekuje), reserved (w toku), done (zakończone), failed (błąd). |
progress_percent | INT | Wskaźnik postępu (0 - 100%). |
processed_items | INT | Liczba dotychczas przetworzonych elementów. |
total_items | INT | Całkowita liczba elementów do przetworzenia. |
attempts | INT | Liczba podjętych prób wykonania. |
max_attempts | INT | Maksymalna dozwolona liczba prób (domyślnie 3). |
heartbeat_at | DATETIME | Znacznik czasu ostatniej aktywności procesu wykonawczego. |
error_message | TEXT | Komunikat błędu w przypadku niepowodzenia. |
output_log | TEXT | Dziennik komunikatów diagnostycznych generowanych w trakcie wykonania. |
3. Stany i cykl życia zadania
waiting(Oczekujące): Zadanie utworzone przez API lub akcję użytkownika, oczekuje na pobranie przez robota.reserved(Pobrane / W trakcie): Zadanie zablokowane i aktywnie przetwarzane przezqueue_worker.done(Zakończone sukcesem): Wszystkie elementy zostały pomyślnie przetworzone,progress_percent = 100.failed(Niepowodzenie): Wystąpił błąd krytyczny i wyczerpano dopuszczalny limit prób (attempts >= max_attempts).
4. Mechanizm Heartbeat i ochrona przed awarią
Aby zapobiec permanentnemu zablokowaniu zadań w stanie reserved w przypadku nagłego zatrzymania procesu robota (np. restart serwera, OOM killer), robot co kilka sekund aktualizuje kolumnę heartbeat_at. Jeśli zadanie w stanie reserved nie odnotowało aktualizacji przez ponad 5 minut, kolejny przebieg robota uznaje je za porzucone, zwalnia blokadę i podejmuje kolejną próbę wznowienia.
5. Monitoring i zarządzanie z poziomu panelu
- Ścieżka w panelu:
/automation/queue - Dostępne akcje:
- Podgląd listy zadań z filtrowaniem wg statusu i typu zadania,
- Wgląd w szczegółowy dziennik operacji (
output_log) i komunikaty błędów, - Ręczne ponowienie nieudanego zadania lub anulowanie oczekującego.