[java][事务]tcc事务实战学习过程

  • 学习项目:https://github.com/14251104246/spring-cloud-rest-tcc
  • 下载源码,进入源码目录运行:mvn clean package
  • Docker Compose运行
    • docker-compose -f infrastructure-compose.yml up -d
    • docker-compose -f basic-ms-compose.yml up -d
    • docker-compose -f monitor-ms-compose.yml up -d
    • docker-compose -f business-ms-compose.yml up -d
  • 全部运行后发现内存不够(电脑没超过16g内存的就可以放弃了)
  • 只用docker-compose运行前两个,剩下选择性通过源码启动

    • 发现mysql没启动成功,改用本地mysql
    • 本地数据库执行如下脚本
      CREATE USER 'chris'
        IDENTIFIED BY '123123';
      CREATE SCHEMA IF NOT EXISTS `account`
        DEFAULT CHARACTER SET utf8;
      CREATE SCHEMA IF NOT EXISTS `product`
        DEFAULT CHARACTER SET utf8;
      CREATE SCHEMA IF NOT EXISTS `order`
        DEFAULT CHARACTER SET utf8;
      CREATE SCHEMA IF NOT EXISTS `membership`
        DEFAULT CHARACTER SET utf8;
      
      GRANT ALL ON `account`.* TO 'chris';
      GRANT ALL ON `product`.* TO 'chris';
      GRANT ALL ON `order`.* TO 'chris';
      GRANT ALL ON `membership`.* TO 'chris';
  • 首先添加host
## solar
127.0.0.1 eureka1
127.0.0.1 eureka2
127.0.0.1 rabbitmq
127.0.0.1 zipkin_server
127.0.0.1 solar_mysql
127.0.0.1 gitlab
  • 进入源码启动ZipkinMsApplication
  • 进入源码启动OrderMsApplication
    • 发现控制台只输出banner,且没注册到eureka
    • 修改spring cloud配置中心的eureka配置(已上传到示例项目)
    • 关闭加密(已上传到示例项目)
  • 进入源码启动
  • 进入源码启动
  • 打开订单服务的swagger测试api

深入了解

  • 示例项目中子项目间依赖(使用网关的情况):

    image.png

  • Try Confirm Cancel 补偿模式在示例项目中的应用

    • RESTful TCC模式分3个阶段执行

      graph LR
      try阶段-->Confirm阶段
      Confirm阶段-->Cancel阶段-失败时才有
    • 示例项目中的RESTful TCC模式

      • order订单对accountproduct发起尝试,再向tcc协调器发起确认;
      • tcc协调器对accountproduct进行确认
      • 如果失败则进入cancel阶段
    • 示例项目中的RESTful TCC模式图例

      image.png

    • 示例项目整体架构

    image.png

各服务解析

首次启动时通过Flyway自动初始化数据库。

对spring cloud config server采用fail fast策略,一旦远程配置服务无法连接则无法启动业务服务。

account

用于获取用户信息,用户注册,修改用户余额,预留余额资源,确认预留余额,撤销预留余额。

product

用于获取产品信息,变更商品库存,预留库存资源,确认预留库存,撤销预留库存。

tcc coordinator

TCC资源协调器,其职责如下:

  • 对所有参与者发起Confirm请求。
  • 无论是协调器发生的错误还是调用参与者所产生的错误,协调器都必须有自动恢复重试功能,尤其是在确认的阶段,以防止网络抖动的情况。
order

order服务是本项目的入口,尽管所提供的功能很简单:

  • 下单. 即生成预订单,为了更好地测试TCC功能,在下单时就通过Feign向服务accountproduct发起预留资源请求,并且记录入库。
  • 确认订单. 确认订单时根据订单ID从库中获取订单,并获取预留资源确认的URI,交由服务tcc统一进行确认,如果发生冲突即记录入库,等待人工处理。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值