DubboProviderFilter链是怎么构建的

这篇文章主要介绍“Dubbo Provider Filter链是怎么构建的”,在日常操作中,相信很多人在Dubbo Provider Filter链是怎么构建的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Dubbo Provider Filter链是怎么构建的”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

按需定制开发可以根据自己的需求进行定制,网站设计制作、成都做网站构思过程中功能建设理应排到主要部位公司网站设计制作、成都做网站的运用实际效果公司网站制作网站建立与制做的实际意义

provider端的Filter链构建是在初始化流程中构建的,我们知道初始化流程肯定会走到方法org.apache.dubbo.remoting.transport.netty4.NettyServer#doOpen中,可以在该方法打个断点,然后启动provider服务,调用栈信息如下:

Dubbo Provider Filter链是怎么构建的

从调用栈中方法 org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper#export 代码来看,buildInvokerChain会构建provider的Filter链:

public  Exporter export(Invoker invoker) throws RpcException {
    if (UrlUtils.isRegistry(invoker.getUrl())) {
        return protocol.export(invoker);
    }
    // invoker就是直接调用对应方法的代码,JavassistProxyFactory
    return protocol.export(buildInvokerChain(invoker, SERVICE_FILTER_KEY, CommonConstants.PROVIDER));
}
 

从上述代码来看,buildInvokerChain就是构建Filter链的逻辑,通过SPI方式进行加载,FIlter配置路径为META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter,配置内容如下:

echo=org.apache.dubbo.rpc.filter.EchoFilter
generic=org.apache.dubbo.rpc.filter.GenericFilter
genericimpl=org.apache.dubbo.rpc.filter.GenericImplFilter
token=org.apache.dubbo.rpc.filter.TokenFilter
accesslog=org.apache.dubbo.rpc.filter.AccessLogFilter
activelimit=org.apache.dubbo.rpc.filter.ActiveLimitFilter
classloader=org.apache.dubbo.rpc.filter.ClassLoaderFilter
context=org.apache.dubbo.rpc.filter.ContextFilter
consumercontext=org.apache.dubbo.rpc.filter.ConsumerContextFilter
exception=org.apache.dubbo.rpc.filter.ExceptionFilter
executelimit=org.apache.dubbo.rpc.filter.ExecuteLimitFilter
deprecated=org.apache.dubbo.rpc.filter.DeprecatedFilter
compatible=org.apache.dubbo.rpc.filter.CompatibleFilter
timeout=org.apache.dubbo.rpc.filter.TimeoutFilter
 

注意,上述配置的Filter是包括Consumer和Provider的,初始化provider只会用到provider侧的Filter配置,具体Filter实现类会通过group来区分PROVIDER或者CONSUMER,对应的buildInvokerChain逻辑如下:

private static  Invoker buildInvokerChain(final Invoker invoker, String key, String group) {
    Invoker last = invoker;
    List filters = ExtensionLoader.getExtensionLoader(Filter.class).getActivateExtension(invoker.getUrl(), key, group);

    if (!filters.isEmpty()) {
        for (int i = filters.size() - 1; i >= 0; i--) {
            final Filter filter = filters.get(i);
            final Invoker next = last;
            last = new Invoker() {
                @Override
                public Result invoke(Invocation invocation) throws RpcException {
                    return filter.invoke(next, invocation);
                }
            };
        }
    }
    return last;
}
 

buildInvokerChain逻辑会按照顺序进行构建Filter过滤链,由于FIlter实现类未设置@Activate注解的顺序,因此Filter过滤链的前后顺序就是在META-INF/dubbo/internal/org.apache.dubbo.rpc.Filter文件配置的顺序,这点要注意。

到此,关于“Dubbo Provider Filter链是怎么构建的”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


当前名称:DubboProviderFilter链是怎么构建的
网址分享:http://bzwzjz.com/article/psdoch.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 重庆企业网站建设 成都模版网站建设 重庆企业网站建设 营销网站建设 定制级高端网站建设 网站建设 古蔺网站建设 成都网站制作 手机网站制作 网站建设公司 成都h5网站建设 专业网站设计 四川成都网站建设 响应式网站建设 高端网站设计推广 成都网站制作公司 成都品牌网站建设 营销网站建设 网站设计制作 网站建设方案 品牌网站建设 成都网站建设