整合Seata之使用AT模式

2024-02-11 SpringCloudSpringCloudAlibaba

AT模式同样是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷。

AT模式会直接提交SQL,而不是等待所有SQL执行完毕后再提交SQL;RM会形成快照,失败了直接恢复,如果成功则删除快照(异步)即可。XA模式是强一致,AT模式则是最终一致。

image-20240211103735069

# 使用方式

# application.yml
seata:
  data-source-proxy-mode: AT

在方法上添加注解:@GlobalTransactional

@GlobalTransactional

# AT模式的脏写问题

事务1设置money=90,之前的值是100,最后执行失败回滚成100,在执行事务1的中间,事务2执行money=80,回滚成100把80的修改语句覆盖了。

image-20240211105036730

Seata引入全局锁机制,在一个事务执行时,防止另一个事务执行修改操作。

image-20240211111753007