Architektura

TaskThreadPoolHandler

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.

ActionThreadPoolHandler

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.

MonitoringBootInitializer

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).

Zarządzanie stanem serwisu

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.

Tworzenie Zadań

Proces tworzenia zadań dzieli się na dwa kroki:

  1. Tworzenie Zadania (zapis opcji do bazy)

  2. 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ć.

Aktualizacja Zadania

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.

Usuwanie Zadania

Aby usunąć zadanie trzeba je najpierw zatrzymać

Tworzenie Akcji

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

Aktualizacja Akcji jest zapisywana do bazy danych i nie jest propagowana do akcji, które działają w momencie aktualizacji.

Deduplikacja akcji

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.

Związek między Zadaniami i Akcjami

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.

Last updated