Dubbo源码分析(Filter)

原创 2016年09月01日 08:56:34

  

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


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

给dubbo接口添加白名单——dubbo Filter的使用

在开发中,有时候需要限制访问的权限,白名单就是一种方法。对于Java Web应用,Spring的拦截器可以拦截Web接口的调用;而对于dubbo接口,Spring的拦截器就不管用了。 dubbo提供了...
  • mj158518
  • mj158518
  • 2015年08月09日 20:45
  • 32882

10. Dubbo原理解析-Listener & filter

Listener ExporterListener: dubbo在服务暴露(exporter)以及销毁暴露(unexporter)服务的过程中提供了回调窗口,供用户做业务处理。ProtocolLis...

dubbo 自定义过滤器,打印接口调用信息

dubbo 自定义过滤器,打印接口调用信息        dubbo提供了web filter类似的com.alibaba.dubbo.rpc.Filter,这样,我们可以在dubbo提供的服务提...

Dubbo之——Dubbo Filter实战

熟悉Dubbo的同学或朋友,都会知道,一般dubbo的service层都是一些通用的,无状态的服务。但是在某些特殊的需求下,我们又需要传递一些上下文环境,打个不恰当的比方,例如需要在每次调用dubbo...

dubbo学习笔记 十三 dubbo-filter

前面学了rpc的filter,那么这模块就简单了 dubbo-filter-cache和dubbo-filter-validation dubbo-filter-cache 通过判断是否命中...
  • akfly
  • akfly
  • 2016年12月19日 17:16
  • 867

dubbo Filter

dubbo中的Filter过滤器的使用场景: 对于Java Web应用,spring的拦截器可以拦截Web接口的调用,而对于dubbo接口,Spring的拦截器就不管用了。要实现次...

dubbo中添加filter

在开发中,有时候需要限制访问的权限,白名单就是一种方法。对于Java Web应用,Spring的拦截器可以拦截Web接口的调用;而对于dubbo接口,Spring的拦截器就不管用了。 dub...

dubbo Filter源码分析

dubbo Filter的作用: 在业务代码执行前后加入逻辑操作,又不影响业务逻辑,比如服务跟踪(http://blog.csdn.net/blacklau/article/details/70257...

dubbo调用链/过滤器链的创建分析

前言在Dubbo中,provider或consumer一方进行方法调用时,会对调用进行一些处理,例如超时,异常,token等处理。这个功能的实现是通过Dubbo内置的Filter或用户自定义的Filt...

浅谈dubbo的ExceptionFilter异常处理

背景 我们的项目使用了dubbo进行不同系统之间的调用。 每个项目都有一个全局的异常处理,对于业务异常,我们会抛出自定义的业务异常(继承RuntimeException)。 全局的异常处理会根据不同的...
  • mj158518
  • mj158518
  • 2016年04月23日 22:47
  • 20703
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Dubbo源码分析(Filter)
举报原因:
原因补充:

(最多只允许输入30个字)