-
Notifications
You must be signed in to change notification settings - Fork 8.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
springCloud服务使用@LocalTcc未生效或报错显示 #7047
Comments
thanks for your feedback. |
请问这个问题计划会在哪个版本的到修复 |
@funky-eyes 老哥 这个有计划修复的时间吗?是否有其他使用方式可以规避,或者有修复的大体方案,我这边也可以尝试修复,我这的业务需要使用localtcc的模式的需求,多谢帮忙看看。 |
你可以提供一个稳定复现的最小demo吗? |
明白 我尽快提供 多谢 |
@funky-eyes 最小可复现的demo已提交 https://github.com/wxrqforever/localTccDemo 我这里本周有些关于这个问题进展,同步一下。 我在完成最小可复现demo时,即一个纯spring-cloud项目后发现无法复现上面提到的报错"java.lang.RuntimeException: java.lang.NoSuchMethodException: org.springframework.aop.SpringProxy.prepare(org.apache.seata.rm.tcc.api.BusinessActionContext, int) 在这种情况下,debug可以看到: 断点2:org.apache.seata.rm.tcc.interceptor.TccActionInterceptorHandler#parseAnnotation 这里这段判断代码我有个疑问,在for循环里发现后NoSuchMethodException就抛出异常中断,那这里为什么要是一个循环,是存在什么场景能够到下一次循环而不触发这个异常吗?这里是否可以考虑,改成只要找到目标method的就可以,而不是必须都存在。 以上,期待您的建议 |
这个问题我认为有2个原因 |
|
明白,但是如我前面所述,在存在aop的场景下,@TwoPhaseBusinessAction在实现类上时这个注解会失效,即使修复了parseAnnotation方法的问题,也仍然存在。定位了一下问题出在org.apache.seata.rm.tcc.interceptor.parser.TccActionInterceptorParser#tccProxyTargetMethod |
@funky-eyes 哥 这个再帮忙看看 |
是的应该要获取非代理的原始bean,GlobalTransactionScanner order调低升高其优先级应该也能拿到原始对象,不过先看下直接不调整order如何获取到原始bean吧 |
好的,我来修复这个问题 |
一、相关组件版本
二、问题描述
业务想接入改造成TCC,所以先用一个简单的例子验证一下特性,发现一直达不到效果。
1.tcc相关注解在接口
代码如下:
启动正常,tcc resource注册成功:
代码执行后报错,报错日志:
debug定位了一下报错的地方,这里拿到的接口是SpringProxy,八成是spring代理的,这个接口里肯定是没有的preapre
org.apache.seata.rm.tcc.interceptor.TccActionInterceptorHandler#parseAnnotation
2.tcc相关注解在实现类
看了和tcc使用的相关issue,怀疑是注解的位置导致的,因此我将注解移动到了实现类中,
启动后,虽然tm 和rm注册成功. 但是并没有看到tcc resource注册成功的这条日志:
代码执行后,确实返回了/ by zero异常,但是cacnel方法并没有被回调。
甚至isLocalTCC都没有命中:
以上,希望能得到帮助,多谢!
The text was updated successfully, but these errors were encountered: