分布式事务解决方案
一、消息队列
放到本地事务最后一步
发送消息写到最后边
一直重试,知道成功为止
把方法分开
先发送消息,后调用本地事务
消息(事务消息) 不可消费
本地成功后再把消息改成可消费消息
本地事务失败把消息删掉
2PC 两阶段提交
二、AT-业务无侵入模式
第二个事务提交前等待下wait
1、首先拿到事务的控制权(封装数据源重新包装connection)
2、TXManager 各个本地事务的管理者
多个本地事务对应一个groupid
一起提交一起回滚
添加切面
三、TCC(业务层面的回滚,不是技术框架的回滚,数据库不支持事务也可以)
try comit cancel
1.账户系统
账户表
uid,余额, 冻结金额(特殊字段)
缺点:表的加字段,每个方法都得有try comit cancel,对接其他公司接口时,无法要求其他公司接口添加try comit cancel
2.订单系统
下一个订单
try:冻结金额+100 余额不动
comit 冻结金额-100 余额-100
cacel 冻结金额-100
四、saga
减错了再加回去
五、XA
XA是一个分布式事务协议,由Tuxedo提出。XA中大致分为两部分:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚
六、seata(阿里)