分布式事务:
分布式系统中,分布式模块之间的事务是一个难题,比如A订单模块调用库存模块B的 ,在调用支付模块C ,如果C执行失败,B却执行成功了 ,这可能就有问题了, 你库存少了 ,钱却没付。 这不得亏死啊!所以我们必须对这种连续的模块调用用事务进行管理 ,保证他们一起提交,失败就一起回滚。
LCN:
1、 LCN事务控制有2个模块:分别是是TxClient和TxManager。
TxClient是实现了javax.sql.DataSource的代理连接池, TxManager则是是一个事务协调器。
2、 LCN的事务补偿机制:在一个事务因为服务器挂机等原因失败时,TxClient向协调器发送失败消息,协调器会进行事务补偿,通知TxClient再模拟上次错误请求。
分布式事务框架TX-LCN
TX-LCN的使用:
1、 下载TxManager(事务协调器)项目,正确配置部署。
注意:本地需要redis服务支持。在yml配置中加上redis和数据源的配置,启动TM .
2、事务发起端配置TXClient,引入依赖,启动类加上注解@EnableDistributedTransaction ,配置文件中还要配置TM的信息:
tx-lcn:
client:
manager-address: 127.0.0.1:8070
3、在需要事务管理的业务方法上加上本地事务注解和LCN事务注解即可。
@LcnTransaction
@Transaction
public void add(){
addC();
updateB();
}
当然TX-LCN也支持TCC两阶段提交事务,这里就不详细介绍使用,TCC因为需要开发者自己去实现try,confirm,cancel的业务实现,开发量大,侵入性大,也不适合维护。