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

不问归期 提交于 2020-10-02 12:17:26

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

 

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

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

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

    

    这里我主要关键点:

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

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

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

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

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

 

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

 

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

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

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

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

    原始的数据:

    

   

    正常commit事务:

    数据库数据变化:

    

    三个服务日志输出:

    

    

    Seata 服务端:

    

   

    失败回滚事务:

    数据库数据没变化:

    

    三个服务日志输出:

    Seata 服务端:

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!