XA oder nicht-XA für die JMS-und DB-Betrieb
Ich bin ziemlich neu in der XA und non-XA Welt. Meine Anforderung ist, Lesen Sie eine Nachricht aus der Warteschlange, bis es eine NICHT-Nachricht. Für jede Nachricht in der Warteschlange, gehen Sie zu den DB-und einige Transaktionen wie select, insert, update.
Ist das möglich mit nicht-XA-datasource? Ich bin derzeit mit XA-datasource-aber gelernt, dass es teuer ist und die Leistung Treffer.
Jede Hilfe dankbar! Dank
- Sie sollte wohl erklären, wie die queue verwaltet wird, was für ein Produkt verwendet wird. Einige db-Anbieter bieten auch queueing-Lösungen, die Ihr Leben einfacher machen wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie brauchen, um in Ihrer Transaktion, die sowohl die Interaktion mit einem JMS-Verbindungs - (d.h. senden oder empfangen einer Nachricht) und eine Verbindung mit einer Datenbank, indem Sie eine db-Verbindung dann müssen Sie auf jeden Fall eine XA-datasource seit Ihrer Transaktion ist ein zwei-Phasen-commit (2PC) Transaktion.
In einem zwei-Phasen-commit-Transaktion, die Sie entweder übernehmen Sie die änderungen auf alle Ihre Ressourcen (in deinem Fall JMS-und DB-Ressourcen) oder rollback alle änderungen, wenn etwas schief geht mit Ihnen.
Um dies zu tun, müssen Sie eine Verbindung zu einem XA-fähige datasource.
Darüber hinaus werden in einem Java EE container, JMS-Verbindungen sollte es schon sein, XA-Fähigen.
Betrachten 1.5 phase-commit. Grundsätzlich:
Möglicher Fehler-Szenarien:
Nicht 1, noch 3 Blätter Ihr system in einem inkonsistenten Status. Im Fall von 1, brauchen Sie nur, die Mitteilung zu senden.
Behandeln Szenario 2. Sie müssen sich vorstellen, Dubletten-check, um Ihr system. Also im wesentlichen Ihre Transaktions-management Aussehen würde, ähnlich wie diese:
Wenn die JMS-Transaktion fehlschlägt, Ihre message broker wird erneut versuchen, die Nachricht zu senden (oder Sie müssen erneut manuell je nach broker-setup), aber du Dublettenprüfung wird das erkennen und entfernen Sie es aus der Warteschlange.
Geben Ihnen eine Idee von, XA und NON-XA-transations erkläre ich es kurz,
Eine XA-Transaktion ist eine "global transaction".
Eine nicht-XA-Transaktion ist eine "Transaktion".
Einer XA-Transaktion umfasst eine Koordinierung der Transaktions-manager, der mit einer oder mehreren Datenbanken (oder anderen Ressourcen, wie JMS) alle beteiligten in einem einzigen globalen Transaktion. Wenn eine Verbindung zu mehreren Datenbanken dann ist XA.
Nicht-XA-Transaktionen haben keine transaction coordinator, und eine einzelne Ressource ist dabei alle seine Transaktion ist die Arbeit selbst. Diese haben nur eine Datenbank als Ressource.
XA garantiert, dass eine Nachricht überein 1 und nur 1 DB-Transaktion.
Denken wir daran, was geschehen, ohne dass XA (nur eine von vielen möglichen Situationen):
Für unser Glück, XA existieren! 🙂
Aus den Vorstellungen der Sicht es gibt Kosten zu bezahlen, aber immer die Qualität (service -) Kosten hat!