您的位置:首页 > 其它

微服务调用保证分布式事务一致性(TX-LCN分布式事务框架)

2019-06-05 10:04 1961 查看

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: