Dubbo源码分析(一)Dubbo的扩展点机制

写在前面的话

自己用Dubbo也有几年时间,一直没有读过Dubbo的源码,现在来读一读Dubbo的源码,分析一下Dubbo的几个核心,并写一个Dubbo的源码专题来记录一下学习过程,供大家参考,写的不好的地方,欢迎拍砖
专题分为以下几个部分:

PS:读源码前先掌握以下基础

  1. JDK的SPI
  2. Java多线程/线程池基础
  3. Javasissit基础(动态编译)
  4. Netty基础
  5. Zookeeper基础,zkClient客户端API
  6. 工厂模式,装饰模式,模板模式,单例模式,动态代理模式
  7. Spring的schema自定义扩展
  8. 序列化

PS:读源码前的建议

  1. 代码量很大,各个地方都有关联,慢慢读,不要着急,一遍不行就两遍,两遍不行就三遍,总有看懂的时候
  2. 带着问题去看,先想想这段代码的目的是什么,解决了什么问题
  3. 沿着一条主线读,不影响流程走向的代码可以略过

Dubbo的扩展点

为什么先读扩展点

之所以选择先从Dubbo的扩展点机制入手,因为Dubbo的整体架构设计上,都是通过扩展点去实现,先了解清楚这块内容,才能读懂代码。

Dubbo扩展点规范

  • 如果要扩展自定义的SPI,可以在resources目录下配置三种目录,分别是:META-INF/dubbo/ 或者 META-INF/services/ 或者 META-INF/dubbo/internal/
  • 文件名称和接口名称保持一致,文件内容为key=vaule的形式xxx=com.alibaba.xxx.XxxProtocol
  • 举个栗子:如果我们要扩展Dubbo的一个协议,在META-INF/dubbo/com.alibaba.dubbo.rpc.Protocol这个文件里面增加一行自己的扩展:xxx=com.alibaba.xxx.XxxProtocol,在Dubbo的配置文件<dubbo:protocol name="xxx" />,这样就可以实现自定义的Dubbo协议

Dubbo的扩展点和JDK的SPI的区别

Dubbo的扩展点(Extension)在JDK的SPI思想的基础上做了一些改进:

  • Dubbo的设计中用到了大量的全局缓存,所有的Extension都缓存在cachedInstances中,该对象类型为ConcurrentMap<String, Holder
posted @ 2018-11-06 15:15  LikeSummerCat  阅读(3427)  评论(0编辑  收藏  举报