Architektura
Last updated
Last updated
Klasa obsługuje uruchamianie Zadań, zarządzanie działającymi, restartowanie oraz wyłączenie ich. Wszystkie Zadania działają w thread pool i są uruchamiane w czasie zgodne ze swoim interwałem lub czasem uruchomienia.
Klasa obsługuje uruchamianie Akcji, zarządzanie działającymi, restartowanie oraz wyłączenie ich. Wszystkie Akcje działają w thread pool i są uruchamiane w czasie zgodne ze swoim interwałem lub czasem uruchomienia. Klasa obsługuje również uruchamianie wszystkich przypisanych do Zadania Akcji w momencie, gdy Zadanie wysyła Trigger.
Klasa odpowiada za uruchomienie przy starcie serwisu wszystkich Zadań, które powinny działać (tzn. mają zapisany stan RUNNING) oraz porządkowanie stanu Akcji (tzn. wszystkie, które mają zapisany stan RUNNING są anulowane).
Informacje o wszystkich Zadaniach i Akcjach są zawsze zapisywane do bazy danych. Założenie jest następujące - stan aplikacji ma być zawsze do odtworzenia z bazy danych, w przypadku, gdyby serwis się wyłączył. Z tego względu cały kluczowy stan jest najpierw zapisywany do bazy, a następnie odzwierciedlany w aplikacji.
Proces tworzenia zadań dzieli się na dwa kroki:
Tworzenie Zadania (zapis opcji do bazy)
Uruchamianie Zadania (wysyłanie go do TaskThreadPoolHandler)
Między 1. i 2. krokiem można dowolnie aktualizować opcje Zadania, oraz przypisywać do niego Akcje. Po wystartowaniu Zadania również jest to możliwe, jednak w przypadku aktualizacji może być wymagany restart Zadania (np. zmiana interwału wykonywania Zadania). W przypadku dodawania zadań trzeba pamiętać, że Zadanie może wysłać Trigger, zanim Akcja zdąży się zapisać.
Aktualizacje dzielą się na dwa rodzaje - opcje jednego Zadania, lub globalne opcje dla wszystkich Zadań danego typu
Jeśli Zadanie nie zostało jeszcze uruchomione, lub jest zatrzymane aktualizacja jest równoznaczna z aktualizacją opcji w bazie danych. Jeśli Zadanie działa, informacja jest najpierw do zapisania do bazy. Następnie w zależności od zmian serwis dla danego typu Zadania decyduje, czy aktualizacja może być wprowadzona na działającym Zadaniu, czy wymaga jego restartu.
Aby usunąć zadanie trzeba je najpierw zatrzymać
Akcje dodajemy do istniejących Zadań. Dla danego Zadania możemy dodać tylko jedną Akcję danego typu. Tworzenie Akcji jest równoznaczne z zapisaniem jej do bazy danych. W momencie, gdy Zadanie Triggeruje Akcje są wczytywane z bazy i uruchamiane.
Aktualizacja Akcji jest zapisywana do bazy danych i nie jest propagowana do akcji, które działają w momencie aktualizacji.
Serwis definiuje mechanizm zabezpieczający przed zbyt częstym uruchamianiem Skcji. Każda Akcja ma w swoich opcjach pole actionPausePeriod, które określa ile czasu musi minąć między dwoma kolejnymi wywołaniami danej Akcji. Jeśli nie minęło wystarczająco dużo czasu Akcja nie zostanie uruchomiona.
Zadania nie są świadome jakie Zadania zostaną uruchomione w momencie Triggeru. To po stronie Akcji leży dostosowanie swojego zachowania do typu Zadania, które ją wywołało, jeśli jest to konieczne. Dodatkowo Akcja może decydować, czy wspiera dany typ Zadania.