dubbo异步调用的坑
Posted 码上升华
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dubbo异步调用的坑相关的知识,希望对你有一定的参考价值。
一、前言
最近版本发布了一个新版本,然后发现有个dubbo返回null了,仔细的排查了一下服务端的处理逻辑,不存在返回null的情况,而且同一个服务,其它地方调用正常,只有一个地方调用返回null,后来经询问下来,原来小伙伴在外层的服务调用加了async=true,好吧,掉坑了!瞬间闪过,难道外层的异步特性传递给了后续的调用,找资料核实了一下,还真是,有幸能踩到这个大坑我也就认了!
二、现象
原先正常调用的dubbo同步接口,突然返回null了
三、分析
原来的调用逻辑
小伙伴调整后,期望得到的处理效果
实际的效果
原来是com.alibaba.dubbo.rpc.protocol.AbstractInvoker的137,由于调用服务A时小伙伴加了async=true,此时时RpcContext.getContext().getAttachments()也包含async=true,所以这时invocation.setAttachment(Constants.ASYNC_KEY,Boolean.TRUE.toString()),然后服务A调用服务B时,RpcContext.getContext().getAttachments(),此时包含async=true,打算url本身async=false
而后续的处理RpcUtils.isAsync(getUrl(), invocation)为true,所以服务A调用服务B变成了异步处理
四、解决方案
修改一下dubbo的源码,打包发布解决!修改后如下图:
com.alibaba.dubbo.rpc.protocol.AbstractInvoker
希望对大家有帮助!
以上是关于dubbo异步调用的坑的主要内容,如果未能解决你的问题,请参考以下文章