采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
对于db-db,db-jms的链式事务,相对于使用jta事务,其实好像没有解决问题呀,最后一步出错的话.
倒数第二步提交的事务无法回滚,那么它的意义何在呢?
在使用同步方式进行分布式事务管理,具体比较复杂,不同的数据源使用的方式应该也不一样。
我们还是以db-db为例,大致说一下链式和同步的区别。
首先,在我们的课程里面,没有详细说明两个DB的情况下,使用事务同步的分布式事务管理的实现。实例中,演示了链式的实现,比较简单,将多个数据库的事务管理器加入一个chain即可。但是要使用同步方式,可以使用‘TransactionAwareDataSourceProxy’,第一个数据库使用JpaTransactionManager,使用spring事务管理,将第二个数据库的datasource用这个proxy封装,这样,这个数据源就能够就能够监听第一个Jpa的事务管理器管理的事务,跟着它一起提交、回滚。
除了用这种proxy,还可以使用spring的事务的事件机制,有一个EventListener,也可以实现。但是需要一些额外的配置。
其实,从某种角度来说,这样同步实现的事务管理,跟链式其实没有本质区别,都是依次提交。只是在链式里面,几个事务的提交、回滚是在一个方法里执行,便于维护事务。而同步是通过一些事件、监听器、或代理的方式进行同步事务调用。这样的话,在两个事务之间,势必会增加很多方法调用,这就增加了出错的概率。
还有一个就是,使用链式事务管理,它会在提交、回滚的时候返回一个状态,比如“STATE_MIXED”状态就是表示有部分事务已经提交,但是之后的事务已经回滚。在需要的时候,这也能用来判断是否出现了数据的不一致。
jta是两阶段提交的强一致性事务管理。链式事务其实跟spring事务同步实现的事务管理差不多,因为最后的事务提交失败的话,之前的事务不会回滚。但是链式事务从一个链里取出所有的事务管理器,依次开启事务,依次提交,而不是依赖事件或监听器,可以最大化的保证这些事务都提交成功。你可以看一下它的源代码,它在提交、回滚都做了一些额外的工作保证一致性。所以说它在保证事务一致性上,相对强一些。
链式事务从一个链里取出所有的事务管理器,依次开启事务,依次提交,而不是依赖事件或监听器,可以最大化的保证这些事务都提交成功。 ------------------------------------------------- 那么就是说不做链式事务的时候,出错的原因主要是什么呢? 原来的事务执行的脆弱之处在哪
登录后可查看更多问答,登录/注册
掌握分布式事务实现技术,是架构师必备技能。
1.2k 13
1.1k 13
1.6k 12
1.5k 8
1.6k 7