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=falseSpringBoot +达博+ Seata分布式事务实战详解