我阅读了关于2PC/XA分布式事务的一些信息,并且了解到JTA对其提供了支持。看起来有许多资源管理器(RM)(例如RDBMS或JMS),而一个 TransactionManager (TM) 实例可以跨多个 RM 管理全局事务。
我知道使用Saga模式会更好,但思考以下问题仍然很有趣:
- 2PC/XA分布式事务是否使得在一个应用程序和一个 TM 中只能从许多 RM 执行事务成为可能?
- 如果不行-如何使用2PC/XA分布式事务在许多微服务之间实现,以便在每个微服务仅访问自己的数据库的情况下使用2PC?我很高兴看到一个例子
- 我们需要将TransactionManager作为单独的微服务来提供在许多微服务之间提供 2PC 吗?
更新: 在JTA中,TransactionManager
不提供REST API来管理跨微服务的事务。 LIXA 提供了这个功能。此文带有例子,可以作为回答的补充 :)
TransactionManager
,它将成为此应用程序的一部分,因此我们可以委托将分布式事务管理跨多个数据库/JMS系统到TransactionManager
。但是,我无法想象如何在使用每个服务模式的数据库的不同微服务之间管理多个数据库,而每个服务仅访问其DB。在这种情况下如何进行2PC/XA分布式事务? - Dmitriy Mishenyov