一、什么是分布式事务?
二、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 个微服务都需要添加依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <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> <!-- 依据druid 来实现的拦截功能 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.19</version> </dependency>
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 测试转账服务
到此这篇关于LCN分布式事务解决方案详解的文章就介绍到这了,更多相关LCN分布式事务解决内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/qq_41532872/article/details/94591415