做网站背景步骤,wordpress电脑安装教程,大连网站建设培训班,wordpress 4.4.8最近在研究seata的AT模式#xff0c;先在本地搭建了一个演示demo#xff0c;看看seata是如何使用的。在网上搜的demo#xff0c;配置相对来说都比较多。我最终搭建的版本#xff0c;配置较少#xff0c;所以写篇文章分享下#xff0c;希望能帮到对seata感兴趣的小伙伴。先…最近在研究seata的AT模式先在本地搭建了一个演示demo看看seata是如何使用的。在网上搜的demo配置相对来说都比较多。我最终搭建的版本配置较少所以写篇文章分享下希望能帮到对seata感兴趣的小伙伴。先看下文章目录 文章目录 1、AT模式架构图2、演示微服务搭建2.1、demo源码获取2.2、项目配置改动2.2.1、执行scripts中的脚本2.2.2、修改数据库的连接2.2.3、修改注册中心 3、seata server服务搭建4、验证4.1、事务成功提交4.2、事务回滚 1、AT模式架构图
我从官网上拷贝了一张图先看一下seata AT模式的整体架构 从图上一共看到5个服务 1)、TC事务协调者负责全局事务的管理以及各分支事务的管理
2)、Business业务聚合服务比如下单服务。在下单服务中会依赖很多上游服务比如图中的库存服务、订单服务、账户服务等
3)、Storage库存服务
4)、Account账户服务
5)、Order订单服务
2、演示微服务搭建
2.1、demo源码获取
我把演示demo的代码上传到了码云可以从码云上将项目下载下来在本地部署 项目地址 依次启动OrderService、StorageService、AccountService、seataProject这4个项目
2.2、项目配置改动
2.2.1、执行scripts中的脚本
以AccountService项目举例其他3个项目一样 account_tbl.sql undo_log.sql
2.2.2、修改数据库的连接
如果你的这几个项目对应的数据库端口和我项目里不一致需要改下
2.2.3、修改注册中心
如果你不想用zookeeper那这里也需要修改一下
3、seata server服务搭建
其实没啥可搭建的开箱即用。seata server下载地址 启动命令如下。如果想改端口运行可以加-p参数或者修改conf目录中的application.yml文件
sh seata-server.sh -h 127.0.0.1 -m file4、验证
如果你没改动端口直接访问 http://127.0.0.1:6099/business/commit?userId2commodityCode1orderCount2即可触发下单异常我在OrderService的微服务中写死了一段测试代码userId2时触发一个异常然后触发事务回滚 此时可以在TM、RM处看到事务提交以及回滚的日志
4.1、事务成功提交
TM提交事务日志
//1、开启一个全局事务,事务id: 0.0.1.1:8099:6224557381237174277
o.a.s.tm.api.DefaultGlobalTransaction : Begin new global transaction [0.0.1.1:8099:6224557381237174277]//2、准备提交事务
o.a.s.tm.api.DefaultGlobalTransaction : transaction 0.0.1.1:8099:6224557381237174277 will be commit//3、事务提交结束
o.a.s.tm.api.DefaultGlobalTransaction : transaction end, xid 0.0.1.1:8099:6224557381237174277//4、事务已提交
o.a.s.tm.api.DefaultGlobalTransaction : [0.0.1.1:8099:6224557381237174277] commit status: CommittedRM提交事务日志
//1、注册分支事务成功,分支事务id:6224557381237174279; 全局事务id: 0.0.1.1:8099:6224557381237174277
o.a.seata.rm.AbstractResourceManager : branch register success, xid:0.0.1.1:8099:6224557381237174277, branchId:6224557381237174279, lockKeys:account_tbl:1//2、提交分支事务
o.a.s.c.r.p.c.RmBranchCommitProcessor : rm client handle branch commit process:BranchCommitRequest{xid0.0.1.1:8099:6224557381237174277, branchId6224557381237174279, branchTypeAT, resourceIdjdbc:mysql://127.0.0.1:3310/seata-account, applicationDatanull}//3、分支事务提交中
org.apache.seata.rm.AbstractRMHandler : Branch committing: 0.0.1.1:8099:6224557381237174277 6224557381237174279 jdbc:mysql://127.0.0.1:3310/seata-account null//4、分支事务提交成功
org.apache.seata.rm.AbstractRMHandler : Branch commit result: PhaseTwo_Committed然后可以看下三张表(库存、订单、账户)的数据是否保持一致
4.2、事务回滚
手动制造一个提交异常然后看TM以及AM的日志
TM回滚事务日志
//1、开启一个全局事务,事务id: 0.0.1.1:8099:6224557381237174273
o.a.s.tm.api.DefaultGlobalTransaction : Begin new global transaction [0.0.1.1:8099:6224557381237174273]//2、事务将要回滚
o.a.s.tm.api.DefaultGlobalTransaction : transaction 0.0.1.1:8099:6224557381237174273 will be rollback//3、事务回滚结束
o.a.s.tm.api.DefaultGlobalTransaction : transaction end, xid 0.0.1.1:8099:6224557381237174273//4、事务已回滚
o.a.s.tm.api.DefaultGlobalTransaction : [0.0.1.1:8099:6224557381237174273] rollback status: RollbackedRM回滚事务日志
//1、注册分支事务分支事务id:6224557381237174275; 全局事务id: 0.0.1.1:8099:6224557381237174273
o.a.seata.rm.AbstractResourceManager : branch register success, xid:0.0.1.1:8099:6224557381237174273, branchId:6224557381237174275, lockKeys:account_tbl:2//2、分支事务回滚,回滚要依赖undo_log日志
o.a.s.c.r.p.c.RmBranchRollbackProcessor : rm handle branch rollback process:BranchRollbackRequest{xid0.0.1.1:8099:6224557381237174273, branchId6224557381237174275, branchTypeAT, resourceIdjdbc:mysql://127.0.0.1:3310/seata-account, applicationDatanull}//3、分支事务回滚中
org.apache.seata.rm.AbstractRMHandler : Branch Rollbacking: 0.0.1.1:8099:6224557381237174273 6224557381237174275 jdbc:mysql://127.0.0.1:3310/seata-account//4、回滚完成,删除undo_log
o.a.s.r.d.undo.AbstractUndoLogManager : xid 0.0.1.1:8099:6224557381237174273 branch 6224557381237174275, undo_log deleted with GlobalFinished//5、分支事务回滚成功
o.a.s.rm.datasource.DataSourceManager : branch rollback success, xid:0.0.1.1:8099:6224557381237174273, branchId:6224557381237174275//6、分支事务回滚结果.二阶段回滚
org.apache.seata.rm.AbstractRMHandler : Branch Rollbacked result: PhaseTwo_Rollbacked再次看下三张表的数据如果事务回滚成功数据是没有变化的不会发生修改或者新增 最后看下undo_log表应该是无数据但是Auto_Increment的值已经变成了2证明undo_log中新增过一条数据然后又被删除了。这印证了事务回滚会利用到undo_log回滚完成就删除undo_log