DUBBO的 SPI 方式思考

简介:

      Java 的SPI方式可以动态的加载扩展类,但是用法不是很灵活,DUBBO框架因为存在多个扩展点所以实现了自定义的一种扩展方式,也就是实现了作者提到的微核心,插件式的思路。

比如,需要扩展Dubbo的协议,只需在xxx.jar中放置: 
文件:META-INF/services/com.alibaba.dubbo.rpc.Protocol 
内容为:com.alibaba.xxx.XxxProtocol 
Dubbo通过ServiceLoader扫描到所有Protocol实现。 

 

这样的一种扩展思路本身是非常符合OO的思想,如果要扩展一种新的实现,只需要配置和新写实现即可,甚至不需要动原来的jar包,直接放在扩展包。当每一个地方都使用扩展的时候就出现了一种管道式的架构。

 

  

 

           在dubbo框架的每一个有多种实现或者潜在实现的关键点,作者都使用了这种方式,实现了微核心,插件式的开发模式。之前对以微核心这种思想一直理解的不是很深入,看了dubbo后,有了新的认识。此外作者在这些切入点还支持包装和过滤监听等功能,当有个性化的需求的时候是很容易切入这个点。此为为了管理这些扩展点,dubbo实现了一个庞大的工厂类来支持或者和加载这些类,而具体需要使用什么具体扩展实例,都是通过上层传递的参数来确定的。通过这样的设计:

 

             1、实现了微核心。通过这种方式,代码的关键代码非常的少,主流程逻辑非常清楚,在设计最初对细节不是很确定的情况下,但是主要流程固定的情况下可以使用这种方式,将后来的需求作为实现,个人化的需求,可以作为插件的监听或者连接器配置,这样可以使得主流程非常的清晰,也符合OO的思想。

             2、便于测试。因为使用了这样的方式,每个功能点都是扩展,可以针对每个点进行测试,每个组件因为都只承担了一个功能,所以可以针对一个功能点进行测试。

             3、便于扩展,当需需求变化需要变动功能时,可以针对扩展点进行写新的实现。或者开发新的插件,这样不会动到原来的东西。

    总之,dubbo是一个良好的微核心插件式的例子,通过对dubbo的学习,可以领悟这种设计的优点和可扩展性,进而对理解OO思想也很有帮助。

 

  • 419c7543-61b3-329e-b341-a3e7977849dd-thu
目录
相关文章
|
3月前
|
存储 负载均衡 Dubbo
深入理解Dubbo-4.Dubbo扩展SPI
深入理解Dubbo-4.Dubbo扩展SPI
73 1
|
4月前
|
缓存 Dubbo Java
趁同事上厕所的时间,看完了 Dubbo SPI 的源码,瞬间觉得 JDK SPI 不香了
趁同事上厕所的时间,看完了 Dubbo SPI 的源码,瞬间觉得 JDK SPI 不香了
|
7月前
|
监控 Dubbo Java
由浅入深Dubbo核心源码剖析SPI机制 2
由浅入深Dubbo核心源码剖析SPI机制
30 0
|
7月前
|
缓存 Dubbo Java
由浅入深Dubbo核心源码剖析SPI机制 1
由浅入深Dubbo核心源码剖析SPI机制
51 0
|
3月前
|
缓存 Dubbo Java
Dubbo 第三节_ Dubbo的可扩展机制SPI源码解析
Dubbo会对DubboProtocol对象进⾏依赖注⼊(也就是⾃动给属性赋值,属性的类型为⼀个接⼝,记为A接⼝),这个时候,对于Dubbo来说它并不知道该给这个属性赋什么值,换句话说,Dubbo并不知道在进⾏依赖注⼊时该找⼀个什么的的扩展点对象给这个属性,这时就会预先赋值⼀个A接⼝的⾃适应扩展点实例,也就是A接⼝的⼀个代理对象。在调⽤getExtension去获取⼀个扩展点实例后,会对实例进⾏缓存,下次再获取同样名字的扩展点实例时就会从缓存中拿了。Protocol是⼀个接。但是,不是只要在⽅法上加了。
|
2月前
|
XML 缓存 Dubbo
Dubbo的魔法之门:深入解析SPI扩展机制【八】
Dubbo的魔法之门:深入解析SPI扩展机制【八】
30 0
|
5月前
|
Dubbo Java 应用服务中间件
阿里一面:说一说Java、Spring、Dubbo三者SPI机制的原理和区别
大家好,我是三友~~ 今天来跟大家聊一聊Java、Spring、Dubbo三者SPI机制的原理和区别。 其实我之前写过一篇类似的文章,但是这篇文章主要是剖析dubbo的SPI机制的源码,中间只是简单地介绍了一下Java、Spring的SPI机制,并没有进行深入,所以本篇就来深入聊一聊这三者的原理和区别。
|
5月前
|
缓存 Dubbo Java
Dubbo2.7的Dubbo SPI实现原理细节
Dubbo2.7的Dubbo SPI实现原理细节
32 0
|
6月前
|
Dubbo Java 应用服务中间件
JDK SPI、Spring SPI、Dubbo SPI三种机制的细节与演化
Java SPI(Service Provider Interface)是JDK提供的一种服务发现机制,用于在运行时动态加载和扩展应用程序中的服务提供者。
162 0
|
6月前
|
存储 Dubbo Java
Dubbo第三讲:Dubbo的可扩展机制SPI源码解析
Dubbo第三讲:Dubbo的可扩展机制SPI源码解析

热门文章

最新文章