Dubbo源码分析(Filter)

664人阅读 评论(3) 收藏 举报
分类:

  

 有关Dubbo的介绍,在此就不多说了,在这里简单的分享一下,最近看dubbo源码的感受,阿里封装的东西,真心不错,下面就简单说一下Dubbo中的Filter。


 Filter是一种递归的链式调用,能够达到在远程调用真正执行的前后加入一些逻辑操作,相当于AOP的连接器,或者跟Servlet中的Filter概念是一样的。


 Dubbo中的Filter


 上图中就是dubbo中的所有的filter,比如经常用的并发控制、超时设置、异常设置、tps限流设置等等都是通过filter来实现的。


 具体的实现过程



 上图就针对生产者和消费者来构建Filter责任链过程,具体看一下buildInvokerChain方法

 

 private static <T> Invoker<T> buildInvokerChain(final Invoker<T> invoker, String key, String group) {
        //真正的代理
        Invoker<T> last = invoker;
		//查询所有的Filter
        List<Filter> filters = ExtensionLoader.getExtensionLoader(Filter.class).getActivateExtension(invoker.getUrl(), key, group);
        if (filters.size() > 0) {
		   //遍历每一个Filter
            for (int i = filters.size() - 1; i >= 0; i --) {
                final Filter filter = filters.get(i);
                final Invoker<T> next = last;
                last = new Invoker<T>() {

                    public Class<T> getInterface() {
                        return invoker.getInterface();
                    }

                    public URL getUrl() {
                        return invoker.getUrl();
                    }

                    public boolean isAvailable() {
                        return invoker.isAvailable();
                    }

                    public Result invoke(Invocation invocation) throws RpcException {
					    //重点在这里,责任链传递调用
                        return filter.invoke(next, invocation);
                    }

                    public void destroy() {
                        invoker.destroy();
                    }

                    @Override
                    public String toString() {
                        return invoker.toString();
                    }
                };
            }
        }
        return last;
    }
    

 

 上述代码就展示了Filter构建的整个过程。


 

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:507718次
    • 积分:13152
    • 等级:
    • 排名:第1002名
    • 原创:290篇
    • 转载:5篇
    • 译文:1篇
    • 评论:3127条
    博客专栏