Dubbo源码分析(Filter)

  

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


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


 Dubbo中的Filter

Dubbo源码分析(Filter)_第1张图片

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


 具体的实现过程

Dubbo源码分析(Filter)_第2张图片


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

 

 private static  Invoker buildInvokerChain(final Invoker invoker, String key, String group) {
        //真正的代理
        Invoker last = invoker;
		//查询所有的Filter
        List 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 next = last;
                last = new Invoker() {

                    public Class 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构建的整个过程。


 

你可能感兴趣的:(Java学习)