1.2.0版本seata整合nacos实现分布式事务(2)

    上一篇  https://my.oschina.net/u/3901188/blog/4316832  已经完成了 Seata 的服务端 整合 nacos 的搭建启动。本篇章记录 Seata 客户端实现模拟分布式事务场景。git

 

    分布式事务场景准备:客户端分三个服务 order订单服务、storage库存服务、account帐户余额服务。三个服务对应的独立的数据库。sql

    库须要自行创建,我这里建立的名称为 seata_order、seata_account、seata_storage 三个库名称。sql的建库建表语句我都写代在项目的sql文件夹中。数据库

    写在这里太过于长了,太占地方了,项目demo我直接打包上传上码云了。项目地址连接: https://gitee.com/maogouxiong/seata-nacos-test-demo     须要的伙伴能够上去下载下来自行测试。浏览器

    

    这里我主要关键点:mybatis

        项目我使用了 mybatis-plus 的代码生成器直接生成代码。代码生成器类我放在了每一个服务项目的test目录下。分布式

        另外代理数据源是要配置的。在代码里面每一个服务都有配置代理数据源,须要留意看下工具

        我这里测试 Seata 服务端是经过源码启动的。源码启动看下我上一篇文章有讲到。post

        先启动 Seata 服务端,当 Seata 服务端启动成功,启动日志是这样的:测试

       而后启动 三个客户端服务, 当 order订单服务、storage库存服务、account帐户余额服务 三个服务启动成功,启动日志是下三图所示:spa

 

        三个服务启动成功后,Seata 服务端是收到对应的通知:

 

        而后分布式事务流程是这样的:

       一、浏览器或者postman测试工具访问 order服务建立订单。

       二、order服务建立订单过程当中,使用 Feign 远程调用库存服务进行减库存,调用用户余额服务进行减余额。
        
       三、接着order服务更新订单状态。 最后模拟出现异常 int a = 1/0 ,seata 实现分布式事务回滚。 

        整个过程当中,只须要在远程调用方的方法上加上 @GlobalTransactional(rollbackFor = Exception.class) 注解便可。

    原始的数据:

    

   

    正常commit事务:

    数据库数据变化:

    

    三个服务日志输出:

    

    

    Seata 服务端:

    

   

    失败回滚事务:

    数据库数据没变化:

    

    三个服务日志输出:

    Seata 服务端:

    

相关文章
相关标签/搜索