2017-12-29 21 views
0

Ich bin in der Mitte der Erstellung einiger Datenprozessor. Es hat die nächste API-Methode: Erstellen Sie eine Aufgabe, erhalten Sie das Ergebnis der Aufgabe.Java: Das Erstellen derselben Aufgabe für mehrere Instanzen verhindern

Datenprozessoren sollten wiederhergestellt werden, wenn sie fehlschlagen und in mehreren Instanzen ausgeführt werden dürfen. (DP1, DP2, usw.).

Ich speichere den Zustand in Redis db. Zum Beispiel:

API erstellt Task (Runnable), setzt es in das ScheduledThreadPoolExecutor, und alle 5 Sekunden laufen, Redis Zustand ändern. Nach dem Abrufen der Ergebnisse von Aufgaben wird die Aufgabe abgebrochen und der Redis-Status wird gelöscht.

Wenn der DataProcessor ausfällt und neu startet, erhalte ich den Status von der Redis-Datenbank, erstelle neue Aufgaben und alles ist in Ordnung.

Wenn jedoch eine andere DataProcessor-Instanz ausgeführt wird, übernimmt sie auch den Status von Redis, erstellt Tasks neu und führt sie aus, was nicht bevorzugt ist, da diese Tasks bereits von einer anderen Instanz von DataProcessor verarbeitet werden.

Ich kann diesen Redis-Status nicht einmal als [nicht verarbeitet] im Falle eines Fehlers markieren, weil die Instanz, die weiß, dass sie fehlgeschlagen ist, ... nun, fehlgeschlagen ist und nichts mehr tun kann.

Was kann in dieser Situation getan werden?

Antwort

0

Gefunden "Redisson" -Bibliothek, hat es verteilten Scheduler, genau das, was ich brauche.

Verwandte Themen