LCN分布式事务解决方案详解

网友投稿 907 2022-12-17

LCN分布式事务解决方案详解

LCN分布式事务解决方案详解

目录一、什么是分布式事务?二、lcn的实现思路2.1 本地执行的状态怎么提交给全局事务?2.2 本地事务的提交或回滚怎么实现?三、lcn的使用3.1 -lcn-manager (全局的事务管理器)3.2 配置lcn-manager3.3 启动lcn3.4 模拟转账服务3.4.1 add-service3.4.2 decr-service3.5 2 个微服务都需要添加依赖3.6 需要自定义数据库的连接池3.7 使用3.7.1 事务的发起者3.7.2 添加配置文件3.8 启动2 个微服务3.9 测试转账服务

一、什么是分布式事务?

二、lcn的实现思路

Lcn 的本质就是提供了一个全局的事务管理器

本地事务的提交还是回滚,由全局的事务管理器决定

2.1 本地执行的状态怎么提交给全局事务?

使用切面拦截本地事务的执行结果,使用tcp 发送给tx-manager

2.2 本地事务的提交或回滚怎么实现?

等待tx-manager通知自己

三、lcn的使用

3.1 -lcn-manager (全局的事务管理器)

3.2 配置lcn-manager

配置eureka 并且配置redis

Redis:

3.3 启动lcn

3.4 模拟转账服务

数据库:

3.4.1 add-service

3.4.2 decr-service

3.5 2 个微服务都需要添加依赖

org.springframework.boot

spring-boot-starter-actuator

com.codingapi

transaction-springcloud

${lcn.last.version}

*

com.codingapi

tx-plugins-db

${lcn.last.version}

org.slf4j

*

&lhttp://t;!-- 依据druid 来实现的拦截功能 -->

com.alibaba

druid

1.0.19

3.6 需要自定义数据库的连接池

在2 个微服务的启动类或配置类里面都可以添加

@Bean

public DataSource dataSource() {

DruidDataSource dataSource = new DruidDataSource();

dataSource.setUrl(env.getProperty("spring.datasource.url"));

dataSource.setUsername(env.getProperty("spring.datasource.username"));//用户名

dataSource.setPassword(env.getProperty("spring.datasource.password"));//密码

dataSource.setInitialSize(10);

dataSource.setMaxActive(50);

dataSource.setMinIdle(0);

dataSource.setMaxWait(60000);

dataSource.setValidationQuery("SELECT 1");

dataSource.setTestOnBorrow(false);

dataSource.setTestWhileIdle(true);

dataSource.setPoolPreparedStatements(false);

return dataSource;

}

3.7 使用

3.7.1 事务的发起者

转账:

事务的参与者

减少钱:

加钱:

3.7.2 添加配置文件

3.8 启动2 个微服务

3.9 测试转账服务

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:postman测试传入List<String>参数方式
下一篇:一文秒懂springboot druid 配置
相关文章

 发表评论

暂时没有评论,来抢沙发吧~