博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dubbo源码解析(三)
阅读量:7102 次
发布时间:2019-06-28

本文共 2247 字,大约阅读时间需要 7 分钟。

hot3.png

这个地方非常重要,dubbo机制里面日志记录、超时等等功能都是在这一部分实现的。

如上一节在介绍扩展点加载时所述,在生成 Protocol 的 invoker 时,实际上使用了

装饰模式,第一个是 filter,第二个是 listener。

这个类有 3 个特点,第一它有一个参数为 Protocol protocol 的构造函数;第二,它

实现了 Protocol 接口;第三,它使用职责链模式,对 export 和 refer 函数进行了封装;
对于函数封装,有点类似于 tomcat 的 filter 机制;我们来看 buildInvokerChain
函数:它读取所有的 filter 类,利用这些类封装 invoker;
我们先来看 filter,具体 ProtocolFilterWrapper 类:

public class ProtocolFilterWrapper implements Protocol {  private final Protocol protocol;	public ProtocolFilterWrapper(Protocol protocol) {    if (protocol == null) {      throw new IllegalArgumentException("protocol == null");    }    this.protocol = protocol;  }		private static 
Invoker
buildInvokerChain(final Invoker
invoker, String key, String group) { Invoker
last = invoker; // Filter.class = com.alibaba.dubbo.rpc.Filter // 读取dubbo-rpc-api工程中的com.alibaba.dubbo.rpc.Filter文件,获取文件中所有Filter的实例。size = 14 // 并根据isMatchGroup()方法过滤和group一致的Filter。size = 8。 group = consumer / provider List
filters = ExtensionLoader.getExtensionLoader(Filter.class).getActivateExtension(invoker.getUrl(), key, group); if (filters.size() > 0) { for (int i = filters.size() - 1; i >= 0; i--) { final Filter filter = filters.get(i); final Invoker
next = last; last = new Invoker
(){...}; } } return last; }}

dubbo-rpc-api工程中的com.alibaba.dubbo.rpc.Filter

echo=com.alibaba.dubbo.rpc.filter.EchoFiltergeneric=com.alibaba.dubbo.rpc.filter.GenericFiltergenericimpl=com.alibaba.dubbo.rpc.filter.GenericImplFiltertoken=com.alibaba.dubbo.rpc.filter.TokenFilteraccesslog=com.alibaba.dubbo.rpc.filter.AccessLogFilteractivelimit=com.alibaba.dubbo.rpc.filter.ActiveLimitFilterclassloader=com.alibaba.dubbo.rpc.filter.ClassLoaderFiltercontext=com.alibaba.dubbo.rpc.filter.ContextFilterconsumercontext=com.alibaba.dubbo.rpc.filter.ConsumerContextFilterexception=com.alibaba.dubbo.rpc.filter.ExceptionFilterexecutelimit=com.alibaba.dubbo.rpc.filter.ExecuteLimitFilterdeprecated=com.alibaba.dubbo.rpc.filter.DeprecatedFiltercompatible=com.alibaba.dubbo.rpc.filter.CompatibleFiltertimeout=com.alibaba.dubbo.rpc.filter.TimeoutFilter

转载于:https://my.oschina.net/u/3135467/blog/806429

你可能感兴趣的文章
python工程化最佳实践
查看>>
php正则表达式总结
查看>>
Jquery判断数组中是否包含某个元素$.inArray()的用法
查看>>
MyBatis介绍及使用
查看>>
软件版本说明 转
查看>>
最大连续乘积子串
查看>>
***博客系统文章的数据库存储方式
查看>>
linux上ln链接命令详细说明
查看>>
基于OpenCv和swing的图片/视频展示Java实现
查看>>
Android下载图片路径问题
查看>>
内存数组的存储
查看>>
使用BIOS进行键盘输入和磁盘读写01 - 零基础入门学习汇编语言75
查看>>
数据库基础小结
查看>>
在mybatis中,在列表分页查询过程中造成集合属性数据丢失的问题
查看>>
linux 其他知识目录
查看>>
Vue单页应用中Element ui中的el-tree单选功能
查看>>
无监督学习-- 聚类(Clustering)
查看>>
C# 中的委托和事件
查看>>
asp链接access数据库笔记
查看>>
easyui tabs页签显示在底部属性
查看>>