Der Work-Manager
Der Work-Manager ist Teil der Gedys CXM Infrastruktur. Er verwaltet alle geplanten, laufenden oder beendeten Hintergrundprozesse. Dabei achtet er auf Priorisierung und maximalen Ressourcenverbrauch.
Ablauf des Work-Managers
Start
- Beim Start der Anwendung werden alle Work-Items aus der Datenbank ausgelesen, die nicht abgeschlossen sind.
- Bei angeblich laufenden, also abgebrochenen Elementen wird der Status nun auf
Aborted
gesetzt und der Work-Manager führt asynchron dieWorkItemFinished
Methode aus. - Bei wartenden Work-Items wird geprüft, ob sie bereit zur Ausführung sind, und der Status ggf. auf
Queued
geändert. - Items, die sofort bereit sind, bleiben unverändert.
- Bei angeblich laufenden, also abgebrochenen Elementen wird der Status nun auf
- Danach werden die verfügbaren Prozesse nach Priorität der Items an die Items im Status “bereit” verteilt.
- Zuletzt wird ein Timer auf den Startzeitpunkt des nächsten, noch nicht zur Ausführung bereiten Items gesetzt, falls eines existiert.
Abarbeitung
Der Work-Manager ist komplett ereignisgetrieben. Er tut nur Etwas wenn
- sich ein Item beendet. Dann prüft er, ob ein anderes den freiwerdenden Prozess nutzen kann oder ein davon abhängiges Item nun gestartet werden darf.
- ein Item neu eingeplant oder aktualisiert wird. Dann prüft er, ob es sofort bereit zu Ausführung ist und ob dafür ein Prozess frei ist.
- ein Item abgebrochen werden soll. Dann signalisiert er dem Item, den Wunsch abzubrechen, und setzt seinen Status auf
CancellingByUser
. - der Timer für die nächste Startzeit angesprochen hat. Dann setzt er den Status aller Items, deren Startzeitpunkt verstrichen ist auf
Queued
und prüft, ob dafür sofort ein Prozess frei ist. Anschließend wird der Timer auf das nächste Item neu programmiert.
Ende
Wenn die Anwendung beendet oder neu gestartet wird, versucht der Workmanager alle noch laufenden Prozesse zu beenden. Das geschieht in mehreren Schritten:
- Zuerst wird das Starten neuer Prozesse unterbunden. (Es können aber noch neue Prozesse geplant werden.)
- Dann bekommen alle noch laufenden Prozesse ein asynchrones Signal zum Abbrechen (
WorkItemShouldFinish
) und den StatusShutdownRequest
. - Wenn alle Prozesse darauf reagiert haben, wird dem IIS signalisiert, dass die Anwendung jetzt beendet werden kann.
- Wenn sich ein Prozess nicht binnen 1 Minute nach dem Signal aus Punkt 2 beendet, wird die Anwendung trotzdem beendet. Der Prozess wird dabei hart abgebrochen.
Hinweis: Bei einem Anwendungsneustart kann die neue Anwendungsinstanz erst starten, wenn die vorherige beendet wurde. Aufgrund des o.g. Szenarios kann dieser Vorgang um bis zu 1 Minute verzögert werden. Die neue Anwendung bleibt dann im Status “Waiting for old application instance to terminate.” hängen.