Dubbo源码分析(Filter)

  

 有关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
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值