老师好,有几个问题需要请教一下

来源:6-8 分布式事务实现模式与技术

达闻西funnyx

2018-10-22

1.如果使用RokectMQ自带的SDK,不使用spring中的JmsTemplate这种模板,那是不是就不能使用JmsTransactionManager这种事务实现了?如果不能使用,那该使用哪一种事务实现呢?
2.链式事务方式实现中,相当于是管理了两个事务,这个是不是可以理解为还是二段提交呢?
3.如果ORM选择使用Mybatis,事务实现可以选择用DataSourceTransactionManager,那如果现在存在一个分布式事务的需求,是否直接可以修改为JTA这种方式实现?可以描述一下具体的操作方式么?

写回答

1回答

大漠风

2018-10-22

  1.  RokectMQ自带的SDK还真没用单独过,一般用了spring以及spring的事务管理机制,就要使用spring提供的jms或AMQP以及相应服务器的实现的库。你要是就想自己单独用SDK然后通过配置实现使用spring实现事务管理的话,就得使用代码方式的事务管理来依次提交事务,或者通过spring事务的事件将spring事务和你自己管理的mq事务同步起来。但是这样做一般都得不偿失,除非很有必要,不要重复造轮子。

  2. 不管是链式事务管理,还是其他使用spring实现事务同步,都是依次提交事务,这跟通常说的两阶段提交不是一回事。两阶段提交是指,把“事务提交”这样的一件事情分成2个阶段,第一阶段提交完成以后,管理下的所有事务都同步一下,需要相互等大家都完成第一阶段,再进行第二阶段的提交。这样就能保证出现任何错误都能回滚。而依次提交就不存在等大家同步的问题,就是一个个的提交,之后的事务提交出错了,前面提交的也会滚不了。

  3. 在使用spring,特别是spring boot的情况下,要使用JTA,只需要加入相应的spring boot starter的pom设置即可。然后spring会使用spring boot预设的配置配置数据库或MQ等数据源的事务管理器,然后使用JTA的事务管理器进行统一管理。具体实例可以参考示例代码中“imooc-c4-4-spring-trans-jta-multi”。在这个实例中没有进行任何配置,完全使用默认设置。如果使用自己的数据库,可以再参考之后的实例修改properties文件来设置。

0
1
达闻西funnyx
非常感谢!
2018-10-22
共1条回复

分布式事务实践,从原理到实例,解决数据一致性

掌握分布式事务实现技术,是架构师必备技能。

1149 学习 · 153 问题

查看课程