微服务调用保证分布式事务一致性(TX-LCN分布式事务框架)
1.微服务框架首要的任务是解决分布式事务的一致性,因为每个微服务的数据库是不一样的,那么就会导致同时在
调用微服务A-》B-》C时候会出现数据库事务不一致情况。
目前的解决方法一:采用TX-LCN分布式事务框架
核心步骤
1.创建事务组
是指在事务发起方开始执行业务代码之前先调用TxManager创建事务组对象,然后拿到事务标示GroupId的过程。
2.添加事务组
添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给TxManager的操作(默认5S时间内
参与方没有收到 提交事务的通知 会自动进行回滚)。
3.关闭事务组
是指在发起方执行完业务代码以后,将发起方执行结果状态通知给TxManager的动作。当执行完关闭事务组的方法以后,TxManager将根据事务组信息来通知相应的参与模块提交或回滚事务。
目前 LCN为 4.1 版本
主要特点:
1.支持各种基于spring的db框架
2.兼容SpringCloud、Dubbo、motan
3.使用简单,低依赖,代码完全开源
4.基于切面的强一致性事务框架
5.高可用,模块可以依赖RPC模块做集群化,TxManager也可以做集群化
6.支持本地事务和分布式事务共存
7.支持事务补偿机制,增加事务补偿决策提醒
Spring Cloud示例:
添加依赖
<properties> <lcn.last.version>4.1.0</lcn.last.version> </properties> <dependency> <groupId>com.codingapi</groupId> <artifactId>transaction-springcloud</artifactId> <version>${lcn.last.version}</version> </dependency> <dependency> <groupId>com.codingapi</groupId> <artifactId>tx-plugins-db</artifactId> <version>${lcn.last.version}</version> </dependency>
在需要执行的事务上添加注解
@Override //其中isStart = true 表示该方法是事务的发起方例如 @TxTransaction(isStart = true) @Transactional public int save() { }
同时每个的application.yml中添加:
tm:
manager:
url: http://127.0.0.1:8899/tx/manager/
可在界面进行查看
其中 @TxTransaction(isStart = true) 为lcn 事务控制注解,其中isStart = true 表示该方法是事务的发起方例如,服务A 需要调用服务B,服务B 需要调用服务C,此时 服务A为服务发起方,其余为参与方,参与方只需@TxTransaction 即可。
在测试时需要将 事务管理服务启动 txManager, 具体示例参看:https://www.txlcn.org
- LCN分布式事务框架解决分布式事务一致性问题
- 基于Dubbo的分布式事务框架(LCN)
- 远程服务调用 Dubbo分布式框架
- 基于SpringCloud的分布式事务框架(LCN)
- LCN分布式事务框架
- Dubbo分布式远程服务调用框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册
- 基于SpringCloud的分布式事务框架(LCN)
- 基于Dubbo的分布式事务框架(LCN)
- ClassNotFoundException, org.jboss.netty.channel.ChannelPipelineFactory 缺少jar包【远程调用dubbo分布式服务框架遇到的问题】
- 使用“消息服务框架”(MSF)实现分布式事务的三阶段提交协议(电商创建订单的示例)
- Service注册发现及其调用-分布式服务框架
- 基于Dubbo的分布式事务框架(LCN)
- Web Service 之分布式事务支持与单向 Web 服务方法调用支持
- 采用Best effort 1pc + 回滚补偿机制实现的一个distributed transaction (分布式事务框架).基于dubbo rpc服务上实现。
- 关于LCN分布式事务框架
- 分布式服务框架的服务调用
- 微服务分布式事务实战(七)在微服务1中创建整合函数,调用微服务2
- RPC框架/高性能远程同步调用框架/分布式服务框架
- 基于Dubbo的分布式事务框架 LCN
- 分布式远程服务调用(RPC)框架