seata事务视频实践

先遗留两个问题

问题1:如果异常是在orderService子服务消费者内发生,orderItemService还会继续执行吗?觉得应该不会了吧?
问题2:如果orderService发生异常,但是又想orderItemService继续执行而且还能正常提交,这种场景怎么用seata呢?不会直接用trycatch吧,

正文:先看图后实践: 

1:当Application(Controller)模拟Restful请求触发和返回下图

项目重新启动completed时间时09:34:01,异常事务测试是此时间之后。

2:事务提供者Service发起者GlobalTransaction(时间09:34:14开始),并进行业务order-insert,与orderItem-insert两个业务操作,流程是先begin new Global transaction 标识ip:id; 异常时又一次 Begin new Global transaction;  下图console执行 时间和日志

成功insert  xid: ~1035   ;   fail回滚:xid: ~1038   (xid是全局事务id)

2.1:查看服务消费者orderSevice(时间09:34:15开始); 由于Application模拟两次测试,第一次无RuntimeExp;第二次模拟测试触发的异常,所以orderSevice第一次模拟同时就会两段式事务机制并成功(下图SUCCESS蓝色区域onMessage:xid~1029,branchId=~1030),onMessage:xid~1035,branchId=~1036

第二次模拟RuntimeExp,当全局事务触发RuntimeExp, orderSevice重新onMessage:xid~1038,branchId=~1039,下图FAIL 红色区域,进行事务回滚

2.2:同理:服务消费者orderItemProvider,消费成功及回滚失败同” 服务消费者orderSevice“(时间09:34:14开始) orderSevice是onMessage:xid~1038,branchId=~1039;orderItemProvider是onMessage:xid~1038,branchId=~1040

3: seata数据库日志