Я прочитал некоторую информацию о распределенных транзакциях 2 Phase Commit / XA и о том, как JTA поддерживает их. Похоже, что существует множество менеджеров ресурсов - RM (например, RDBMS или JMS) и один экземпляр TransactionManager (TM), который управляет глобальными транзакциями во многих RM.
Я знаю, что лучше использовать паттерн Сага, но все же интересно подумать:
- Предоставляют ли распределенные транзакции 2PC / XA возможность проводить транзакции со многими RM только из одного приложения и одного TM?
- Если нет - как использовать распределенные транзакции 2PC / XA между множеством микросервисов, чтобы обеспечить возможность использования 2PC, если каждый микросервис имеет доступ только к собственной базе данных? Буду рад увидеть пример
- Нужно ли нам использовать службу TransactionManager как отдельный микросервис, чтобы обеспечить 2PC между множеством микросервисов?
UPD: В мире JTA TransactionManager
не предоставляет REST API для управления транзакциями между микросервисами. LIXA предоставляет такую возможность. Статья с примерами в дополнение к ответам :)
TransactionManager
, который будет частью этого приложения, чтобы мы могли делегировать управление распределенными транзакциями между * многими базы данных / системы JMS доTransactionManager
. Но я не могу себе представить, как управлять несколькими базами данных в разных микросервисах, где мы используем базу данных для каждого шаблона службы, и каждая служба имеет доступ только к своей БД. Как в этом случае выполнять распределенные транзакции 2PC / XA? - person Dmitriy Mishenyov   schedule 23.12.2020