栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

dubbo消费者利用filter拦截器塞入隐式参数

dubbo消费者利用filter拦截器塞入隐式参数

之前写过一篇博客是在provider方利用拦截器来处理异常或者打印日志,具体见dubbo的filter
现在要在上游服务调用下游dubbo服务的同时,也把一部分通用参数传入下游来做请求的链路追踪,这些通用参数放入接口参数不现实,且会影响其他服务调用方,于是就利用RpcContext来做隐式参数传递。
当一个上游一个http请求过来时,通过拦截器将通用参数放入MDC中,MDC是和线程相关的,里边的修饰符是ThreadLocal,具体可以见MDC,之后利用拦截器统一将参数塞入。拦截器代码如下:

@Activate(group = CommonConstants.CONSUMER)
@Slf4j
public class DubboHeadFilter extends ListenableFilter {
    @Override
    public Result invoke(Invoker invoker, Invocation invocation) throws RpcException {
        String headParam = MDC.get("headerParam");
        JSonObject param = JSONObject.parseObject(headParam);
        for (Map.Entry temp :param.entrySet()){
            RpcContext.getContext().setAttachment(temp.getKey(), String.valueOf(temp.getValue()));
        }
        return invoker.invoke(invocation);
    }
}

实测set下游收不到,但是setAttachment就能收到,还没查到set和setAttachment有什么区别,有了解的可以回复一下。
之后要在resource路径下创建meta-INF.dubbo文件夹,新建文件org.apache.dubbo.rpc.Filter,文件内容写:

定义的拦截器别名=拦截器文件全路径名(***.***.DubboHeadFilter)

之后切记,pom文件中要修改


            
                src/main/resources
                
                    **/*.*
                
            
        

不然拦截器是不生效的。
其实大致过程和provider的写法一样。我因为pom文件未修改导致拦截器不生效,查了好半天。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/753298.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号