sunrui1225
sunrui1225
> 另外应该独立一个TwoPhaseBusinessAction给saga使用因为某些参数是不适用于saga的,如commitMethod,此外第一版可以将spring module和seata-tcc稍微改一下依赖关系,seata-tcc应该依赖spring module而不是springmodule依赖seata-tcc,可以先把相关注解挪到spring module去 您好,确实TCC和SAGA的注解是不适用的,所以我想为SAGA设计一个新的注解Compensable,注解的属性如下: compensationMethod 补偿方法 forwardRetries 向前失败重试次数 reverseRetries 补偿失败重试次数 retryDelayInMilliseconds 重试间隔时间 以上注解属性定义了SAGA的向后补偿方法,以及向前重试次数机制等。 但是我在修改的代码的时候,感觉要改动的地方好像有些多,有些不太确定是应该新增还是,在原方法修改,我总结了我的一些修改点: ● io.seata.spring.util.TCCBeanParserUtils#isTccAutoProxy 新增加isSAGAAutoProxy ● 在tcc/src/main/java/io/seata/rm/tcc/remoting/parser下增加一个 SAGARemotingParser 分析器,主要是分析一下是否接口被LocalSAGA注解,是的话说明则 ● io.seata.rm.tcc.remoting.parser.DefaultRemotingParser#parserRemotingServiceInfo 要修改,增加SAGA的分支注册,把SAGA注解中的属性如补偿方法等保存在cache中,以便在拦截器中用。 ● 新增加拦截器 SAGAActionInterceptor 对应于...
> 另外ActionInterceptorHandler#doTccActionLogStore 中应该传递branchtype注册至tc,否则到tc还是认为是tcc分支 确实要改成SAGA的branchtype,所以对于ActionInterceptorHandler来处理SAGA,我想可能新增一个doSagaActionLogStore来处理,或者考虑可重用来在内部兼容处理SAGA的branchtype注册至tc
> @sunrui1225 1.Compensable应该改为SagaTransactional 2.向前重试暂时可以先不搞,如果是从rm端重试那倒是可以加,就像rpc重试一样的意思 3.补偿失败暂时也不用搞,这个弄起来麻烦,这个直接跟tcc一样tc端控制来驱动回滚即可 4.据我感觉分析器是否可以跟tcc放在一起,if else判断下就行了吧? 5.localsaga如上同理 6.拦截器暂时也可以用tcc的,后面咱们再完善也不迟 7.处理器就直接用tcc的就行了,你识别到有saga这个注解不就是saga模式了吗,把type改成saga即可,tc端DefaultCore#doGlobalCommit 直接判断如果是saga分支,直接可以删掉这个分支了因为一阶段已经提交了 seata-spirng 与 seata-tcc的依赖关系问题 目前seata-spring中有一些强依赖seata-tcc的服务方法,如是否是tcc模式的判断,tcc拦截器。造成拓展性比较差。 想把这些强依赖的文件迁移到seata-spring中,seata-tcc对seata-spring不可见。tcc和saga包只放独有的注解。再seata-spring以SPI的形式做tcc和saga的拓展。把分析器中对模式判断做抽象,以SPI做tcc和saga的拓展。 拦截器也是做抽象,以SPI对tcc和saga的拓展。 分两次pr,一是迁移强以来的文件到spring中。二是把模式判断和拦截器均做抽象,SPI拓展。 pr1(迁移) 1. seata-tcc中只保留@LocalTCC,@TwoPhaseBusinessAction,剩下的文件都迁移到seata-spring中。 2. 对用户暴露的有两个文件迁移后不能改变路径,分别是io.seata.rm.tcc.api.BusinessActionContext 和 注解io.seata.rm.tcc.api.BusinessActionContextParameter,在spring中是否可以可以建立一个空类BusinessActionContext,路径是之前的路径,继承新路径下的类。 3. 其他迁移的文件包括解析器,拦截器,TCCFence均迁移至seata-spring中。 pr2(加入SAGA模式,抽象拓展) 1. 在扫描器io.seata.spring.annotation.GlobalTransactionScanner#wrapIfNecessary中,把下图片中分析器和拦截器均做抽象。...
> saga失败触发全局回滚事件时,GlobalRollbackRequest,server接收到后判断了如果是saga就将回滚发送给发起者做状态机向前重试或者回退。saga注解这里需要额外注意,目前没有向前重试,发起者又没有对分支做存储,所以可能需要判断下如果是注解,就需要按照tcc部分,给每个分支rm发送分支回滚BranchRollbackRequest。 > >  > >  已经修改,新增了saga注解的resource manager,和saga注解机完全独立开