概述
分布式事务实现的几种模式:消息驱动、事件溯源、TCC
基于消息驱动的springcloud微服务系统:Event Sourcing
事务的原则和实现:sql方式、jdbc方式
spring事务实现:JPA、JMS、JTA
spring的分布式事务实现:JTA、非JTA
分布式事务主要实现一致性。
jdbc提供的事务管理
关闭自动提交即开启事务。
spring提供的事务管理
事务的传播机制:一个service层方法调用另一个service()层的方法,a()中调用b(),a可能设置了事务,b可能也设置了事务
代码实现:加注解@Tra…,实质是使用aop代理实现事务
待验证:加了注解后是否自动回滚、是否还会抛出异常?是否需要try catch,在catch中回滚?
spring定义了事务管理的接口PlatformT…M…,常见的实现
- jdbc的实现,较底层的一种实现方式
- jpa的实现
- jms的实现,用于对消息中间件(mq)的事务管理
- jta的实现,可以在spring中使用,也可以单独使用
jms
springboot对rabbitmq是要jms:
jta
jta可以管理多个数据源(db、mq)的事务。比如一个事务涉及操作多个数据源,可以使用jta来管理事务。
XA:
提交时,多个数据源同时提交,不是逐个提交
XA是一个规范,JTA是XA的java实现:
JTA的缺点:
- 事务持续时间长,锁数据的时间长(由提交花费时间最多的数据源决定)
- 低性能、低吞吐量
对于涉及多个数据源的事务,可以不使用jta,而使用spring的事务同步机制,高性能、高吞吐量,但这种方式只能实现涉及多个数据源的事务近似的一致性。
jta的使用:
多数据源:一个服务访问多个数据源(db、mq等)
多实例:服务集群,一个服务部署多个实例,这些实例可以配置|访问相同、不同的数据源
分布式事务
分布式事务:在分布式系统中实现事务
使用jta