目录
  • 一、什么是分布式事务?
  • 二、lcn的实现思路
    • 2.1 本地执行的状态怎么提交给全局事务?
    • 2.2 本地事务的提交或回滚怎么实现?
  • 三、lcn的使用
    • 3.1 下载lcn-manager (全局的事务管理器)
    • 3.2 配置lcn-manager
    • 3.3 启动lcn
    • 3.4 模拟转账服务
      • 3.4.1 add-service
      • 3.4.2 decr-service
      • 3.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 个微服务都需要添加依赖

        <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分布式事务解决内容请搜索本网站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本网站!

        您可能感兴趣的文章:

        • 一文搞明白Java Spring Boot分布式事务解决方案
        • 图文精讲java常见分布式事务理论与解决方案
        • 详解Java分布式事务的 6 种解决方案
        • 浅谈Java实现分布式事务的三种方案
        • 详解Java TCC分布式事务实现原理
        • Java中JDBC事务与JTA分布式事务总结与区别
        • Java详细分析LCN框架分布式事务