seata 为何二次提交PhaseTwo_Committed会执行多次

j7dteeu8  于 4个月前  发布在  其他
关注(0)|答案(9)|浏览(46)

问题描述:同一个分布式事务执行了多次PhaseTwo_Committed操作,请教如何解决:

2021-05-10 15:07:52.336 [http-nio-7101-exec-5] INFO io.seata.tm.api.DefaultGlobalTransaction - [172.26.201.26:8091:135036741874720768] commit status: Committed
2021-05-10 15:07:52.438 [rpcDispatch_RMROLE_1_3_4] INFO i.s.c.rpc.processor.client.RmBranchCommitProcessor - rm client handle branch commit process:xid=172.26.201.26:8091:135036741874720768,branchId=135036742071853056,branchType=AT,resourceId=jdbc:mysql://172.26.201.26:3306/zg101-springcloudalibaba-product,applicationData=null
2021-05-10 15:07:52.438 [rpcDispatch_RMROLE_1_3_4] INFO io.seata.rm.AbstractRMHandler - Branch committing: 172.26.201.26:8091:135036741874720768 135036742071853056 jdbc:mysql://172.26.201.26:3306/zg101-springcloudalibaba-product null
2021-05-10 15:07:52.438 [rpcDispatch_RMROLE_1_3_4] INFO io.seata.rm.AbstractRMHandler - Branch commit result: PhaseTwo_Committed
2021-05-10 15:07:52.439 [rpcDispatch_RMROLE_1_4_4] INFO i.s.c.rpc.processor.client.RmBranchCommitProcessor - rm client handle branch commit process:xid=172.26.201.26:8091:135036741874720768,branchId=135036742147350528,branchType=AT,resourceId=jdbc:mysql://172.26.201.26:3306/zg101-springcloudalibaba-product,applicationData=null
2021-05-10 15:07:52.439 [rpcDispatch_RMROLE_1_4_4] INFO io.seata.rm.AbstractRMHandler - Branch committing: 172.26.201.26:8091:135036741874720768 135036742147350528 jdbc:mysql://172.26.201.26:3306/zg101-springcloudalibaba-product null
2021-05-10 15:07:52.439 [rpcDispatch_RMROLE_1_4_4] INFO io.seata.rm.AbstractRMHandler - Branch commit result: PhaseTwo_Committed
2021-05-10 15:07:52.440 [rpcDispatch_RMROLE_1_1_4] INFO i.s.c.rpc.processor.client.RmBranchCommitProcessor - rm client handle branch commit process:xid=172.26.201.26:8091:135036741874720768,branchId=135036742281568256,branchType=AT,resourceId=jdbc:mysql://172.26.201.26:3306/zg101-springcloudalibaba-product,applicationData=null
2021-05-10 15:07:52.440 [rpcDispatch_RMROLE_1_1_4] INFO io.seata.rm.AbstractRMHandler - Branch committing: 172.26.201.26:8091:135036741874720768 135036742281568256 jdbc:mysql://172.26.201.26:3306/zg101-springcloudalibaba-product null
2021-05-10 15:07:52.440 [rpcDispatch_RMROLE_1_1_4] INFO io.seata.rm.AbstractRMHandler - Branch commit result: PhaseTwo_Committed
2021-05-10 15:07:52.441 [rpcDispatch_RMROLE_1_2_4] INFO i.s.c.rpc.processor.client.RmBranchCommitProcessor - rm client handle branch commit process:xid=172.26.201.26:8091:135036741874720768,branchId=135036742382231552,branchType=AT,resourceId=jdbc:mysql://172.26.201.26:3306/zg101-springcloudalibaba-product,applicationData=null
2021-05-10 15:07:52.441 [rpcDispatch_RMROLE_1_2_4] INFO io.seata.rm.AbstractRMHandler - Branch committing: 172.26.201.26:8091:135036741874720768 135036742382231552 jdbc:mysql://172.26.201.26:3306/zg101-springcloudalibaba-product null
2021-05-10 15:07:52.441 [rpcDispatch_RMROLE_1_2_4] INFO io.seata.rm.AbstractRMHandler - Branch commit result: PhaseTwo_Committed

rjzwgtxy

rjzwgtxy1#

每个 branchId 都不一样,属于不同的分支事务的二阶段提交

piztneat

piztneat2#

我的业务只有两个服务间调用,在同一个分布式事务中,相同的xid,为何会有这么多个branchId 呢,这些重复的二阶段提交不是每次都有,相同接口有时只有一行,有时就如上图有很多行

whlutmcx

whlutmcx3#

这个就要看业务是怎么使用 seata 的了

qni6mghb

qni6mghb4#

加些日志看下,是不是同一个分支被调用了多次

o3imoua4

o3imoua45#

你在你分支的入口打个日志,看看有没有被多次调用,就可以很快看出问题了。

7ajki6be

7ajki6be6#

一共就一个分支,也没有被多次调用,考虑过幂等性问题,而且这个分支提交的日志记录数量,在同一个接口每次都不太一样,如下图:

aydmsdu9

aydmsdu97#

at模式下一个如果你的rm最外层没加本地事务注解决那么一个dml操作,就是一个分支事务

eivnm1vs

eivnm1vs8#

at模式下一个如果你的rm最外层没加本地事务注解决那么一个dml操作,就是一个分支事务

本接口虽然涉及两个服务,但一共只有3个dml操作,而且不存在重复执行幂等性问题,并且这个二次提交日志的数量,相同业务下每次数量都不太一样

ruarlubt

ruarlubt9#

at模式下一个如果你的rm最外层没加本地事务注解决那么一个dml操作,就是一个分支事务

本接口虽然涉及两个服务,但一共只有3个dml操作,而且不存在重复执行幂等性问题,并且这个二次提交日志的数量,相同业务下每次数量都不太一样

能提供一个可复现的demo?

相关问题