1、LCN 框架的由来

在设计框架之初的1.0 ~ 2.0的版本时,框架设计的步骤是如下的,各取其首字母得来的LCN命名:

  • 锁定事务单元(lock
  • 确认事务模块状态(confirm)
  • 通知事务( notify )

2、LCN 框架相关资料

tx-lcn 官方地址:https://www.txlcn.org/
tx-lcn Github地址:https://github.com/codingapi/tx-lcn
tx-lcn 服务下载地址:https://pan.baidu.com/s/1cLKAeE#list/path=%2F
tx-lcn 服务源码地址:https://github.com/codingapi/tx-lcn/tree/master/tx-manager

3、LCN 框架核心执行步骤

创建事务组:
是指在事务发起方开始执行业务代码之前先调用 TxManager 创建事务组对象,然后拿到事务标示GroupId的过程。

添加事务组:
添加事务组是指参与方在执行完业务方法以后,将该模块的事务信息添加通知给 TxManager 的操作。

关闭事务组:
是指在发起方执行完业务代码以后,将发起方执行结果状态通知给 TxManager 的动作。当执行完关闭事务组的方法以后, TxManager 将根据事务组信息来通知相应的参与模块提交或回滚事务。

4、LCN应用

4.1、搭建 tx-manager 服务

LCN 是通过一个独立的微服务 tx-manager 作为分布式事务控制服务端(事务协调器)。需要执行分布式事务控制的微服务应用都通过远程服务调用的方式,在 tx-manager 上标记事务组,在执行事务处理后,将本地事务状态发送到 tx-manager 中对应的事务组上,tx-manager 会根据具体的状态来通知相应的微服务应用提交或回滚。

tx-manager 也是使用 Spring Cloud 开发的一个微服务应用,在搭建过程上是非常简单的。
下载 tx-manager 事务协调器zip压缩包:
https://pan.baidu.com/s/1cLKAeE#list/path=%2F

压缩包解压后内容如下:

修改 application.properties 配置文件,提供本地微服务应用的 Eureka 注册中心配置、redis配置。其中redis是事务协调器在处理事务组时使用的临时存储。

##########################txmanager-start#######################
#服务端口
server.port=8899#tx-manager不得修改
spring.application.name=tx-managerspring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/static/
###########################txmanager-end########################eureka 地址
eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka/
eureka.instance.prefer-ip-address=true#############################redis-start#########################
##redis 单点环境配置
#redis
spring.redis.database=0
spring.redis.timeout=0
spring.redis.host=192.168.1.136
spring.redis.port=6379
spring.redis.pool.max-active=100
spring.redis.pool.max-wait=3000
spring.redis.pool.max-idle=200
spring.redis.pool.min-idle=50
spring.redis.pool.timeout=600
##############################redis-end#########################################################LCN-start########################
tm.transaction.netty.delaytime = 5
tm.transaction.netty.hearttime = 15
tm.redis.savemaxtime=30
tm.socket.port=9999
tm.socket.maxconnection=100
tm.compensate.auto=false
tm.compensate.notifyUrl=http://ip:port/path
tm.compensate.tryTime=30
tm.compensate.maxWaitTime=5000logging.level.com.codingapi=debug

将修改后的 application.properties 配置文件打包到 tx-manager-x.x.x.jar 中,替代jar中原有的默认配置文件。

使用命令: java -jar tx-manager-x.x.x.jar 启动微服务。
测试tx-manager事务协调器是否启动成功可以访问 http://ip:8899/ 。如下结果代表事务协调器启动成功:

4.2、在微服务中使用LCN实现分布式事务管理

在所有需要处理分布式事务的微服务中增加下述依赖:为统一资源版本,使用 properties 统一管理版本信息。

<properties><lcn.last.version>4.1.0</lcn.last.version>
</properties><dependencies><dependency><groupId>com.codingapi</groupId><artifactId>transaction-springcloud</artifactId><version>${lcn.last.version}</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.codingapi</groupId><artifactId>tx-plugins-db</artifactId><version>${lcn.last.version}</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency></dependencies>

在全局配置文件中增加下述配置:

# 定义事务协调器所在位置。根据具体环境定义其中的IP地址和端口。
tm.manager.url=http://127.0.0.1:8899/tx/manager/

使用LCN做分布式事务管理时,微服务应用内必须提供一个用于获取 txUrl( txUrl就是全局配置文件中定义的 tm.manager.url )的类型实现,这个类可以使用独立应用定义,在微服务应用中引入。

本案例中为了方便,直接在所有的微服务应用中提供对应代码实现。具体如下:

@Service
public class TxManagerTxUrlServiceImpl implements TxManagerTxUrlService {@Value("${tm.manager.url}")private String url;@Overridepublic String getTxUrl() {return url;}
}

在分布式事务管理代码中增加注解 @TxTransaction 。在业务调用方增加的注解需要属性isStart=true 。而被调用方则不需要定义任何的注解属性。

如:交易服务调用了订单服务,那么交易服务中代码:

@TxTransaction(isStart=true)
@Transactional
public void trade() {//本地调用tradeDao.save();//远程调用方orderService.order();
}

订单服务中代码:

@Transactional
@TxTransaction
public void order() {//本地调用orderDao.save();
}

LCN 分布式事务框架相关推荐

  1. LCN分布式事务框架实战

    本文来写个LCN分布式事务框架实战例子 文章目录 概述 概述 lcn分布式事务教程https://www.codingapi.com/docs/txlcn-preface/

  2. LCN分布式事务框架解决分布式事务一致性问题

    LCN分布式事务框架 框架介绍 LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果. 核心步骤 创建事务组 是指在事务发起方开始执行业务代码之前先调用TxMana ...

  3. LCN分布式事务框架

    1.LCN是什么 LCN是国产开源的分布式事务处理框架.LCN即:lock(锁定事务单元).confirm(确认事务模块状态).notify(通知事务). 官网:http://www.txlcn.or ...

  4. 分布式事务(二)LCN分布式事务框架

    1. 简介 LCN框架在2017年6月发布第一个版本,目前最新已经达到5.0版本. LCN早期设计时,1.0版本和2.0版本设计步骤如下: 锁定事务单元(Lock) 确认事务模块状态(Confirm) ...

  5. SpringCloud(7) LCN分布式事务框架入门

    官网:http://www.txlcn.org/ LCN原理:https://github.com/codingapi/tx-lcn/wiki/LCN%E5%8E%9F%E7%90%86 入门测试: ...

  6. SpringCloud - LCN分布式事务框架

    官网:http://www.txlcn.org/ LCN原理:https://github.com/codingapi/tx-lcn/wiki/LCN%E5%8E%9F%E7%90%86 入门测试: ...

  7. 基于SpringCloud的分布式事务框架(LCN)

    框架特点 支持各种基于spring的db框架 兼容springcloud.dubbo 使用简单,代码完全开源 基于切面的强一致性事务框架 高可用,模块可以依赖dubbo或springcloud的集群方 ...

  8. 分布式事务框架lcn入门demo

    文章目录 简介 实现原理 入门demo 简介 LCN分布式事务框架其本身并不创建事务,而是基于对本地事务的协调从而达到事务一致性的效果. LCN5.0.2有3种模式,分别是LCN模式,TCC模式,TX ...

  9. SpringBoot-LCN5.0.2分布式事务框架整合

    LCN分布式事务框架整合 场景图:我们是要在订单服务中,调用库存服务.当下一个订单的时候,就对库存-1操作 1.首先要把tx-manager(分布式协调者)项目搭建起来 我这里使用的是最新的lcn版本 ...

最新文章

  1. 在win ce中如何使正在运行的软件自动升级更新
  2. 20165331 第六周学习总结
  3. nginx指定配置文件启动_NGINX安全加固手册
  4. 嵌入式linux段错误,在嵌入式Linux上使用C Std Lib时出现异常的段错误
  5. Java 面向对象:多态的理解
  6. acm steps chapter2总结
  7. 百度地图API的第一次接触
  8. OpenCV自带的CamShift算法解读
  9. python写几个好玩的程序_Python写的Msn机器人,几好玩的
  10. 激活函数(activation function)的种类与应用
  11. android 模拟器 评测,安卓模拟器哪个更好?四款主流安卓模拟器测评
  12. 数据分析——AARRR模型
  13. 年薪120W的架构师简历你见过吗?java程序员该如何达到?
  14. Chrome 使用绿色版实现同一个机器 打开多个不同的chrome版本
  15. Oracle中有dateadd吗,oracle dateadd的函数有哪些?
  16. 多线程:转载自-时光如水_岁月如哥
  17. 蓝牙在汽车领域中的应用
  18. 软件工程(三)软件可行性研究
  19. Python基础知识三 输出字符
  20. 统计整个同学录有多少在线同学

热门文章

  1. MATLAB bwareaopen函数删除二值图像中小面积白色对象
  2. 电子烟入选21世纪十大最糟科技,你还敢吸吗?
  3. 708 循环有序列表的插入
  4. 三维数学基础之坐标系、向量、矩阵
  5. uniapp+Vue3+Vite+ts+pinia
  6. 听不进真话,是穷人最大的困境
  7. 基于Vue+Element-UI实现的威胁情报可视化系统【100011419】
  8. 基于卷积神经网络的目标检测模型的研究_黄咨_2014_上海交大
  9. idea 格式化快捷键按了无反应
  10. 2022-2024年最全的计算机软件毕业设计选题大全:1000个热门选题推荐✅