Folgendes Szenario:
* Eine MessageQueue (MQSeries auf dem Host um genau zu sein)
* Zwei identisch deployte JBoss Server mit einer EE-Anwendung (Werden über Loadbalancer angesteuert beim Web-Zugriff)
* Die Anwendung hat eine MessageDrivenBean, die auf ein Topic hört und alles was da rein kommt verarbeitet (Datenänderung wird vorgenommen)
Problem: Kommt eine Nachricht, verarbeiten beide Server diese Nachricht und die Datenänderung wird 2x vorgenommen. Das ist extrem unschön.
Was für - simple - Möglichkeiten fallen euch ein um die doppelte Verarbeitung zu unterbinden unter der Annahme:
* An der Queue bzw. dem Topic kann man nix ändern
* Es gibt keine Möglichkeit sicherzustellen, dass die Nachricht nur von einem der beiden Server abgeholt wird
Klar ist, man kann bevor man die Datenänderung durchführt, prüfen ob sie überhaupt notwendig ist und ansonsten verwerfen. Aber das klappt natürlich nur wenn nicht beide Server zeitgleich anfangen die Nachricht zu verarbeiten. Hab ich irgendeine sinnvolle Chance ohne größere Performance-Einbuße eine Synchronisierung/Semaphore Server-übergreifend hinzubekommen? (Praktisch befürchte ich zwar, das uns für alle größeren Änderungen die Zeit fehlt, aber ich bin mal neugierig was es für Möglichkeiten gibt ohne großen Overhead)
* Eine MessageQueue (MQSeries auf dem Host um genau zu sein)
* Zwei identisch deployte JBoss Server mit einer EE-Anwendung (Werden über Loadbalancer angesteuert beim Web-Zugriff)
* Die Anwendung hat eine MessageDrivenBean, die auf ein Topic hört und alles was da rein kommt verarbeitet (Datenänderung wird vorgenommen)
Problem: Kommt eine Nachricht, verarbeiten beide Server diese Nachricht und die Datenänderung wird 2x vorgenommen. Das ist extrem unschön.
Was für - simple - Möglichkeiten fallen euch ein um die doppelte Verarbeitung zu unterbinden unter der Annahme:
* An der Queue bzw. dem Topic kann man nix ändern
* Es gibt keine Möglichkeit sicherzustellen, dass die Nachricht nur von einem der beiden Server abgeholt wird
Klar ist, man kann bevor man die Datenänderung durchführt, prüfen ob sie überhaupt notwendig ist und ansonsten verwerfen. Aber das klappt natürlich nur wenn nicht beide Server zeitgleich anfangen die Nachricht zu verarbeiten. Hab ich irgendeine sinnvolle Chance ohne größere Performance-Einbuße eine Synchronisierung/Semaphore Server-übergreifend hinzubekommen? (Praktisch befürchte ich zwar, das uns für alle größeren Änderungen die Zeit fehlt, aber ich bin mal neugierig was es für Möglichkeiten gibt ohne großen Overhead)