`
小码哥BASE64
  • 浏览: 124340 次
社区版块
存档分类
最新评论

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思想也很有帮助。

 

  • 大小: 38.8 KB
分享到:
评论

相关推荐

    dubbo-spi_mouse1oc_dubbospi_

    Dubbo SPI(Service Provider Interface)是阿里巴巴开源的分布式服务框架Dubbo中的一个重要特性,它提供了一种服务发现和服务实现动态加载的方式。通过SPI机制,Dubbo可以灵活地扩展其功能,使得开发者能够按照自己...

    Dubbo源码分析之SPI

    4. **SPI配置文件**:Dubbo的SPI配置通常位于`dubbo.properties`或`META-INF/dubbo/internal`目录下的XML文件中,通过这些文件,开发者可以方便地定义和管理服务及其扩展。 5. **@SPI注解**:Dubbo提供了此注解,...

    dubbo spi可扩展机制源码解析

    Dubbo SPI(Service Provider Interface)是阿里巴巴开源的Dubbo框架中的一个重要特性,它提供了一种动态发现服务提供者和加载实现类的机制,使得服务消费者无需关心服务提供者的具体实现,增强了系统的可扩展性和...

    dubbo-thought.7z

    Dubbo SPI机制则更为强大,它提供了更灵活的扩展方式。首先,Dubbo SPI的配置文件通常位于`META-INF/dubbo`目录下,文件名为`config中心ID`.properties。这个配置文件中,不仅包含服务提供者的类名,还可以配置其他...

    Dubbo SPI 机制 代码实现,dubbo-2.6.0 源码

    dubbo-2.6.0 源码

    36_SPI是啥思想?dubbo的SPI机制是怎么玩儿的?.zip

    SPI(Service Provider Interface)是Java提供的一种服务发现和服务使用的机制,它允许开发者通过定义接口并在配置文件中指定实现类的方式,动态地加载服务实现。SPI的思想核心在于解耦,使得服务使用者无需关注服务...

    shican-spi:参考 dubbo spi

    此外,Dubbo SPI还支持XML和注解方式的配置,使得配置更加多样和直观。 在实际应用中,`shican-spi`可能是基于Dubbo SPI实现的一个自定义扩展框架,它可能包含了一些特定的组件或服务的实现,旨在提供类似于Dubbo的...

    深度解析Dubbo的可扩展机制SPI源码:从理论到实践,打造高效、稳定的分布式服务框架

    SPI机制使得Dubbo作为一个高度可定制化的RPC框架,可以轻松地添加新的服务协议、序列化方式等组件。下面我们将从理论到实践,详细解析Dubbo SPI的源码及其工作原理。 首先,我们来看一下Dubbo SPI架构图。Dubbo SPI...

    1.为什么dubbo要自己设计一套SPI.txt

    ### 为什么Dubbo要自己设计一套SPI? #### 一、SPI基本概念 SPI(Service Provider Interface)是一种服务发现机制,允许程序在运行时查找并加载实现特定接口的服务提供者。这种机制广泛应用于Java环境中,其核心...

    dubbo的SPI-扩展点机制

    dubbo的核心思想就是SPI思想,想读懂dubbo源码应该认真的看下,详细的讲解了dubbo的SPI思想,从为什么,是什么,怎么做的来分析了dubbo的spi思想

    03-05-11-Apache Dubbo 进阶之内核剖析md1

    ### Apache Dubbo 进阶之内核剖析:深入SPI机制 #### 一、引言 Apache Dubbo是一款高性能、轻量级的开源微服务框架,它提供了面向接口的远程方法调用设计,使得开发者能够像调用本地方法一样调用远程方法。Dubbo...

    dubbo资源 dubbo-admin dubbo demo

    【压缩包子文件的文件名称列表】"dubbo-master"通常表示这是Dubbo项目的主分支或者完整版本,可能包含了Dubbo的所有模块,包括核心库、服务治理模块、协议支持、SPI扩展机制、以及相关的示例和文档。 深入讲解这些...

    服务治理中间件dubbo原理解析

    工厂类提供了根据名称获取具体实现的方法,这样的设计方式使得Dubbo内部的模块可以方便地通过SPI接口获取到需要的服务。 ### 结论 通过以上对Dubbo中间件和服务治理机制的解析,我们可以理解到SPI机制在Dubbo中的...

    深度解析Dubbo的可扩展机制SPI源码:从理论到实践,打造高效、稳定的分布式服务框架.rar

    在Dubbo中,Service Provider Interface (SPI) 是其核心的可扩展机制,它使得用户可以根据自己的需求自定义实现特定的功能,如协议、序列化、注册中心等。本文将深入探讨Dubbo的SPI源码,从理论到实践,揭示其设计...

    incubator-dubbo-dubbo-2.6.1

    7. **SPI扩展机制**:Dubbo提供了Service Provider Interface(SPI)机制,允许开发者自定义并扩展服务的行为。 **在2.6.1版本中可能包含的改进和优化:** - 性能提升:可能对核心代码进行了优化,提高了服务调用的...

    20180620-Dubbo常用配置文件分析-笔记.docx

    - **配置方式**:Dubbo SPI 使用自定义配置,通常在`META-INF/dubbo/internal/`目录下配置。 - **扩展性强**:Dubbo SPI 支持按需加载,可以延迟实例化,提高性能。 - **支持优先级**:Dubbo SPI 支持优先级配置...

    dubbo示例代码dubbo-sample

    Dubbo支持同步、异步、单向等多种调用方式。同步调用是默认模式,异步调用可以在不阻塞调用线程的情况下完成服务请求,而单向调用则不关心返回结果。在`dubbo-samples-async`模块中,展示了如何使用异步调用。 8. ...

    dubbo-dubbo-2.7.3.rar

    dubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo-2.7.3.rardubbo源码dubbo-dubbo...

    最简单的Dubbo案例之二:SpringBoot + dubbo 无zookeeper方式点对点直连

    本项目只适合dubbo入门学习者,高手请不要浪费金钱; 本项目技术栈 springboot, dubbo ,无 zookeeper 本项目旨在提供最单纯的 dubbo 服务提供者 和消费者的点对点直连,而摒弃任何多余技术对dubbo直连的理解

Global site tag (gtag.js) - Google Analytics