4.分布式事务:Seate

0.1分布式事务问题

        一句话:一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题。

0.2Seata

        Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。seata提供了AT、TCC、SAGA和XA事务模式。

        官网:http://seata.io/zh-cn/

        下载地址:https://github.com/seata/seata/releases

        一个典型的分布式事务过程:

                分布式处理过程的1ID+3组件:

                        Transaction ID XID:全局唯一的事务ID

                        Transaction Coordinator(TC):事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚;

                        Transaction Manager(TM):事务管理器,控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议;

                        Resource Manager(RM):资源管理器,控制分支事务,负责分支注册,状态汇报,并接受事务协调器的指令,驱动分支(本地)事务的提交或回滚;

                处理过程:

         使用:

                本地@Transactional,spring的

                全局@GlobalTransaction,springcloud alibaba seata的

0.2安装

        本次下载的是0.9.0windows版本的。

        步骤:

                1.修改conf目录下的file.conf文件,先拷贝一份副本。主要修改:自定义事务组名称+事务日志存储模式为db+数据库连接信息

                2.service模块:自定义事务组名称

                3.store模块:事务日志存储模式为db+数据库连接信息

        4.新建seata数据库

        5.建表(建表db_store.sql在conf目录里面)

        6.修改conf下的registry.conf配置文件

         7.先启动nacos端口号8848

        8.再启动seata-server.bat

0.3订单/库存/账户业务数据库准备

        以下演示都需要先启动Nacos后启动Seata,保证两个都ok。

        分布式事务业务说明:

                这里我们会创建三个服务,一个订单服务,一个库存服务,一个账户服务。

                当用户下单时,会在订单服务中创建一个订单,然后通过远程调用库存服务来扣减下单商品的库存,再通过远程调用账户服务来扣减用户账户里面的余额,最后在订单服务中修改订单状态为已完成。

                该操作跨越三个数据库,有两次远程调用,很明显会有分布式事务问题。

        创建业务数据库:

                seata_order:存储订单的数据库

                seata_storage:存储库存的数据库

    

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值