-
Notifications
You must be signed in to change notification settings - Fork 823
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
A服务RPC调用B服务找不到可用地址时,导致当前线程上下文被清除,接着再调用C服务时取CSE上下文报空指针异常 #4569
Comments
可以看下NPE的调用栈,一般是不恰当处理异步流程上下文设置导致的问题。 在异步回调中取上下文可能导致NPE,业务设计的时候需要理解下上下文传递的机制。 |
调用栈如下: |
这个问题需要业务自行分析下线程切换情况,看看这种异步线程切换的场景你们这样使用是否合理。混合使用异步,又使用ThreadLocal获取上下文(即InvocationContext, ThreadLocal一般用于在同一个线程里面传递数据,异步线程切换使用会有风险),很容易出现这种错误。 |
1、当前线程A服务代码中第73行使用RPC方式异步调用B服务:
2、负载均衡没有找到B服务可用的地址:
3、A服务当前线程上下文被清除:
4、A服务当前线程再接着调用C服务时,从上下文中获取参数时报空指针:
The text was updated successfully, but these errors were encountered: