SpringBoot +达博+ Seata分布式事务实战详解

  


  

  

Seata是阿里巴巴开源的分布式事务中间件,以高效并且对业务0侵入的方式,解决微服务场景下面临的分布式事务问题。
  

  

事实上,官方在GitHub已经给出了多种环境下的Seata应用示例项目,地址:https://github.com/seata/seata-samples。
  

  

为什么笔者要重新写一遍呢,主要原因有两点:

  
      <李>官网代码示例中,依赖太多,分不清哪些有什么作用李   <李> Seata相关资料较少,笔者在搭建的过程中,遇到了一些坑,记录一下李   
  


  

  

本文涉及软件环境如下:

  
      <李> SpringBoot 2.1.6.RELEASE李   <李>达博2.7.1李   <李> Mybatis 3.5.1李   <李> Seata 0.6.1李   <李>管理员3.4.10李   
  

<强> 1,业务场景
  

  

为了简化流程,我们只需要订单和库存两个服务。创建订单的时候,调用库存服务,扣减库存。
  

  

涉及的表设计如下:
  

        创建表“t_order”(   “id”int(11)不是零AUTO_INCREMENT,   “order_no”varchar(255)默认为空,   “user_id”varchar(255)默认为空,   “commodity_code”varchar(255)默认为空,   “计数”int(11)默认“0”,   “量”双(2)默认的“0.00”,   主键(“id”)   )引擎=InnoDB AUTO_INCREMENT=38默认字符集=utf8;      创建表“t_storage”(   “id”int(11)不是零AUTO_INCREMENT,   “commodity_code”varchar(255)默认为空,   “名字”varchar(255)默认为空,   “计数”int(11)默认“0”,   主键(“id”),   唯一键“commodity_code”(“commodity_code”)   )引擎=InnoDB AUTO_INCREMENT=2的默认字符集=utf8;   另外还需要一个回滚日志表:   创建表“undo_log”(   “id”bigint (20) NOT NULL AUTO_INCREMENT,   branch_id的bigint(20)非空,   xid varchar(100)非空,   rollback_info longblob非空,   log_status int(11)非空,   log_created datetime非空,   log_modified datetime非空,   ext的varchar(100)默认为空,   “上下文”varchar(100)默认为空,   主键(“id”),   唯一键“ux_undo_log”(xid, branch_id)   )引擎=InnoDB AUTO_INCREMENT=67默认字符集=utf8;      之前      

<强> 2,Seata下载安装
  

  

打开https://github.com/seata/seata/releases,目前最新版本是是v0.6.1。
  

  

下载解压后,到seata-server-0.6.1 \ bin \分布目录下可以看到seata-server.bat和seata-server。sh,选择一个双击执行。
  不出意外的话,当你看到- server开始…等字样,就正常启动了。

  

<强> 3,Maven依赖
  

  

由于是达博项目,我们先引入达博相关依赖。
  

        & lt; dependency>   & lt; groupId> org.apache.dubbo   & lt; artifactId> dubbo   & lt; version> 2.7.1   & lt;/dependency>   & lt; dependency>   & lt; groupId> org.apache.dubbo   & lt; artifactId> dubbo-spring-boot-starter   & lt; version> 2.7.1   & lt;/dependency>   达博的服务要注册到动物园管理员,引入馆长客户端。   & lt; dependency>   & lt; groupId> org.apache.curator   & lt; artifactId> curator-framework   & lt; version> 2.13.0   & lt;/dependency>   & lt; dependency>   & lt; groupId> org.apache.curator   & lt; artifactId> curator-recipes   & lt; version> 2.13.0   & lt;/dependency>   之前      

最后,引入Seata。
  

        & lt; dependency>   & lt; groupId> io.seata   & lt; artifactId> seata-all   & lt; version> 0.6.1   & lt;/dependency>   之前      

当然了,还有其他的如Mybatis, mysql-connector等就不粘了,自行引入即可。
  

  


  

  

<强> 1,应用程序。属性
  

  

这里只需要配置数据库连接信息和达博相关信息即可。
  

        server.port=8011      spring.datasource.url=jdbc: mysql://127.0.0.1:3306/seata   spring.datasource.username=根   spring.datasource.password=根      dubbo.application.name=order服务   dubbo.registry.address=饲养员://127.0.0.1:2181   dubbo.protocol.name=达博   dubbo.protocol.port=20881   dubbo.consumer.timeout=9999999   dubbo.consumer.check=false

SpringBoot +达博+ Seata分布式事务实战详解