Предположим, что у нас есть база данных (например, Oracle) и поставщик JMS (например, HornetQ), участвующие в транзакции XA. Сообщение отправляется в очередь JMS, и некоторые данные сохраняются в базе данных в той же распределенной транзакции. After the transaction is committed, a message consumer will read the persisted data and process them in a separate transaction.
Regarding the first XA transaction, the following sequence of events may be executed by the transaction manager (e.g. JBoss)
[*]prepare (HornetQ)
prepare (Oracle) < /li>
Commit (hornetq) < /li>
Commit (oracle) < /li>
< /ol>
Что произойдет, если потребитель сообщения начнет читать данные после того, как Commit завершен в Hornetq, но все еще выполняется в Oracle? Будет ли потребитель сообщений читать устаревшие данные? /> Я бы сказал, что единственный способ для транзакционных ресурсов, чтобы предотвратить это, - это заблокировать всех читателей затронутых данных после завершения фазы подготовки до тех пор, пока не будет выпущен коммит. Таким образом, упомянутый выше потребитель сообщений будет блокироваться до тех пор, пока данные не будут совершены в базе данных.
Подробнее здесь: https://stackoverflow.com/questions/377 ... ansactions
Последовательность данных в транзакциях XA ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение