问题:A服务调用B,C两个服务,在A调用之前RpcContext设置了业务上的透传参数,希望在本次调用全程,在任何地方都能获取到这个参数,但是在A调用完B后 ,该参数丢失。

排查:代码中自定义实现了两个filter,分别时provider和consumer两个Filter,但里面都没有清空参数的逻辑。后面经过排查,dubbo有个默认的实现的flter -> `consumerContextFilter`会在每次调用完成后(本例中,即A调用B方法后),清空RpcContext上下文

 

解决:使用自定义的filter,替换dubbo默认的`ConsumerContextFilter`。 dubbo默认filter是通过spi机制加载的,配置在`resouces/META-INF/dubbo/internal/org.apache.dubbo.rpc.filter`文件中,我们只需要在对应的项目中,建立相同目录的文件,在文件中配置,自己实现的filter即可替换dubbo默认filter。

dubbo默认filter:

 
自定义配置替换默认filter: