tx-lcn
tx-lcn copied to clipboard
集群的情况下部分子事务提交失败
- [x] I have searched the issues of this repository and believe that this is not a duplicate.
1. Bug Description
业务服务每个两台,tm只有一台,提交数据时,日志正常,但是会有部分事务没有成功。不集群的情况下并不会发生该问题 . 失败的事务可能是发起方,也可能是子事务.
我更改过改源码, 主要是负载均衡不支持1.5.0 下eureka的问题, 但我想这应该不会导致上述问题.
我也遇到这个问题了。。都上生产了。。我靠 压力山大。。。我这边是发起方入库了,调用方没有入库。。。也是业务服务每个两台,tm只有一台。启动服务时候是好的,跑一段时间后,报错 :LcnTransactionCleanService : Non lcn connection when clear transaction. @1991wangliang 大佬帮看看什么问题。。上生产了。。很急
文档有点少,得看源码了,不行就不能用了T_T
初步定为到发起方通知tm失败
问题1: 事务结束后,tm只通知了集群中的一台机器,可能会导致部分事务提交不了
问题2:负载均衡问题,a->b,a->c,c->b , b修改的数据是同一条,可能会发生死锁,以及超时问题
问题3:超时问题,由问题2延伸得到。子事务时间较长,导致发起事务超时,根据逻辑,发起者不会通知tm,但可能会正常提交,子事务询问事务状态是失败并回滚,导致事务不一致
我也遇到这个问题了。。都上生产了。。我靠 压力山大。。。我这边是发起方入库了,调用方没有入库。。。也是业务服务每个两台,tm只有一台。启动服务时候是好的,跑一段时间后,报错 :LcnTransactionCleanService : Non lcn connection when clear transaction. @1991wangliang 大佬帮看看什么问题。。上生产了。。很急
问题解决了吗? MessageDto respMsg = rpcClient.request(modChannelKeys.get(0), MessageCreator.notifyUnit(notifyUnitParams));集群环境下,tm只通知到了集群节点1上,如果调用发生在集群节点2上则通知失败
我也遇到这个问题了。。都上生产了。。我靠 压力山大。。。我这边是发起方入库了,调用方没有入库。。。也是业务服务每个两台,tm只有一台。启动服务时候是好的,跑一段时间后,报错 :LcnTransactionCleanService : Non lcn connection when clear transaction. @1991wangliang 大佬帮看看什么问题。。上生产了。。很急
问题解决了吗? MessageDto respMsg = rpcClient.request(modChannelKeys.get(0), MessageCreator.notifyUnit(notifyUnitParams));集群环境下,tm只通知到了集群节点1上,如果调用发生在集群节点2上则通知失败
现在弃用了,等稳定了再说吧。、。哎
我也是这个问题,子事务都不提交,导致死锁,大家有没有什么解决方案啊
你们这种集群环境,要修改tc端注册的key时,说白了,需要让tm精确识别是哪一个实例提交的事务
https://github.com/yizhishang/tx-lcn.git 参考下这个