Springcloud,Nacos 整合 Seata 分布式事务的实际操作和配置

    上一篇记录了 Seata 的配置和启动,这一篇我们实际操作一下 seata 的分布式事务的效果,首先引入 maven 依赖,我们这里seata用的是 1.2 版本,尽量跟随版本走

         <!--seata-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <version>2.1.1.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>io.seata</groupId>
                    <artifactId>seata-spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-all</artifactId>
            <version>1.2.0</version>
        </dependency>

 第二步,将 seata 的两个配置文件 registry.conf  file.conf 复制到项目中去,里面的配置就是上一篇的配置,无需更改

第三步,在配置文件中,加入事务组,这个名字,也是上一篇里面的名字,如果更改了名字,这里也需要更改,每个项目都是一样的配置,

##############    seata配置    ##############
spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group

 第四步,开启数据库代理 ,在启动类上加上注解

@EnableAutoDataSourceProxy

 

第五步,在微服务之间的调用方式上加上注解  @GlobalTransactional(rollbackFor = Exception.class) 

这里贴一下测试的代码

 @Override
    @GlobalTransactional(rollbackFor = Exception.class)
    //@Transactional(rollbackFor = Exception.class)
    public Object updateAge(int age) {

        // 本服务 修改数据
        testUserMapper.updateAge(age);

        // 通过 fegin 调用服务
        testService.updateUserName("test");

        // 两个都执行成功时,这里发生异常 测试是否两个库的数据都会回滚
        System.out.println(1/0);

        return 1;
    }

接下来我们进行测试,微服务直接的调用,这里采用的是 feign 

这个 undo_log 是上一步我们建在各个服务所用的数据库中,我这里是两个不同的库,可以看到,分布式事务,两个库中的 XID 是一致的,表明他们是一个事务,这个日志在你代码执行完毕就会没有,这里我是打 debug 时,进来查看的,如果这时程序报错,两个事务都会回滚,大家可以自行测试一下

项目代码github

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值