首页 > 编程知识 正文

分布式事务框架(LCN 分布式事务框架)

时间:2023-05-04 18:22:19 阅读:123227 作者:4235

1、LCN框架的由来对于设计框架的最初版本1.0 ~ 2.0,框架设计的步骤如下,对从各自的首字母字符得到的LCN进行命名。

锁定事务单元(lock )确认事务模块状态(confirm )通知事务) notify ) 2、LCN框架相关资料tx-lcn官方地址: https://www.txlcn.org/

tx-lcn Github地址: https://github.com/coding API/tx-lcn

tx-lcn服务下载地址: https://pan.Baidu.com/s/1 clk aee # list/path=/

tx-lcn服务源地址: https://github.com/coding API/tx-lcn/tree/master/tx-manager

3、LCN框架核心执行步骤创建事务组:

在事务启动者开始执行业务代码之前,调用TxManager创建事务组对象并获取事务标签GroupId的过程。

添加事务组:

添加事务组是指参与者执行业务方法后,向TxManager添加该模块的事务信息的操作。

关闭事务组:

启动器运行业务代码后,一种操作,用于通知TxManager启动器运行结果的状态。 当您执行关闭事务组的方法时,TxManager会根据事务组的信息通知参与模块提交或回退事务。

4、建立LCN APP应用4.1、tx-manager服务lcn通过独立的微服务tx-manager作为分布式事务控制服务端(事务协调器)。 所有需要分布式事务控制的微服务APP应用程序都使用远程服务调用在tx-manager中标记事务组,并在执行事务后将本地事务的状态标记为tx-manager的相应事务

tx-manager也是使用Spring Cloud开发的微服务APP,在构建过程中非常简单。

下载tx-manager事务协调器zip压缩包:

3359 pan.Baidu.com/s/1 clk aee # list/path=/

压缩包解压缩后的内容如下。

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

# # # # 不能更改spring.resources.static # # # # # # # # # txmanager-end # # # # # # # # # # eureka地址eureka. # # # # redis spring.redis.database=0spring.redis.time out=0spring.redis.host=192.168.1.136 spring.redis.port . redis.pool.min-idle=50 spring.redis.pool.ti idle # # # # # # # # # # # # TM.transaction.net ty.delay time=5tm.transaction.net ty.heart time=15tm.redis.save maxtime=30tm.socket.port port/pat htm.com pensate.try time=30tm.com pensate.max wait time

el.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 )的类型实现,这个类可以使用独立应用定义,在微服务应用中引入。

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

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

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

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

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

订单服务中代码:

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。