`

dubbo相关SPI

 
阅读更多

首先,我们知道JDK是有SPI的,但是dubbo借鉴JDK的实现了属于自己的SPI机制,会有一些不同,比如META-INF/services/目录命名,以及dubbo的SPI配置文件是KV结构的。

 

先看一下JDK的实现:典型的案例是JDBC,也是一个违反双亲委派的案例。

SPI :全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一种动态替换发现的机制, 举个例子来说, 有个接口,想启动运行时动态的给它添加实现,你只需要添加一个实现,而后,把新加的实现,描述给JDK知道就行啦(通过改一个配置文本文件即可)

 

Dubbo的:

META-INF/services/:用来兼容 JDK SPI 。
META-INF/dubbo/:存放用户自定义 SPI 配置文件。
META-INF/dubbo/internal/:存放 Dubbo 内部使用的 SPI 配置

 com.alibaba.dubbo.container.Main 是服务启动的主类,对象中定义了一个ExtensionLoader<Container>对象,会获取/META-INF/dubbo/internal/com.alibaba.dubbo.container.Container配置文件中的Container并start。

参考:ExtensionLoader是dubbo内部的SPI实现,很多对象都是由这个类生成,比较常见的Filter等,并且支持自定义Filter。所以在dubbo中,需要扩展的功能,一般在接口上会加上@SPI注解。

@SPI("netty")
public interface Transporter {...}

@SPI
public interface Filter {...}

@SPI("javassist")
public interface ProxyFactory {...}

@SPI("spring")
public interface Container {...}

 代码中,常常使用ExtensionLoader.getExtensionLoader(Transporter.class).getAdaptiveExtension()来获取需要的对象,通过getExtensionClasses()来获取对应的Class,调用过程中,loadExtensionClasses()->loadFile()方法就是获取接口实例对应Class的,并且会读取到接口上默认的实现类。通过反射加载Class。

Class<?> clazz = Class.forName(line, true, classLoader);

 

分享到:
评论

相关推荐

    dubbo-spi_mouse1oc_dubbospi_

    在本文中,我们将深入探讨Dubbo SPI的工作原理及其相关知识点。 首先,我们需要理解什么是SPI。SPI(Service Provider Interface)是一种在Java中广泛使用的机制,允许应用程序在运行时发现并加载指定服务的实现。...

    Dubbo源码分析之SPI

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

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

    这些文档可能包含了更多关于Dubbo SPI的实践案例、配置示例以及相关原理图解,帮助我们深入理解这一机制。通过阅读这些材料,你可以掌握如何在实际项目中运用Dubbo的SPI机制,实现服务的灵活扩展和解耦。

    dubbo的SPI-扩展点机制

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

    dubbo spi可扩展机制源码解析

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

    dubbo-spiDemo:精神病

    Dubbo SPI(Service Provider Interface)是阿里巴巴开源的Java服务发现框架,它允许开发者在运行时动态地查找和加载服务提供者。SPI机制是基于Java的ServiceLoader类实现的,是Java标准扩展的一种方式,用于解耦...

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

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

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

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

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

    Dubbo的可扩展机制SPI(Service Provider Interface)是其核心特性之一,允许开发者根据需要动态扩展服务。SPI机制使得Dubbo作为一个高度可定制化的RPC框架,可以轻松地添加新的服务协议、序列化方式等组件。下面...

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

    Dubbo采用微内核架构加插件体系的设计模式,通过SPI(Service Provider Interface)机制实现对各种功能的扩展,使中间件具有高度的可扩展性和灵活性。 ### SPI机制 SPI机制是一种服务发现机制,它允许开发者为自己...

    dubbo-thought.7z

    Dubbo SPI是阿里巴巴开源的高性能RPC框架Dubbo中的服务发现机制,它在Java SPI的基础上进行了扩展和优化,以适应微服务架构中的服务治理需求。 在Java SPI中,服务接口定义在`META-INF/services`目录下的一个以接口...

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

    dubbo-2.6.0 源码

    dubbo资源 dubbo-admin dubbo demo

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

    shican-spi:参考 dubbo spi

    在Java领域,JDK本身就提供了SPI的支持,而在微服务领域,Dubbo SPI作为阿里巴巴开源框架Dubbo的重要组成部分,也提供了更加灵活和高效的扩展机制。 Dubbo SPI,即Dubbo的服务提供者接口,是对JDK SPI的一种增强和...

    incubator-dubbo-dubbo-2.6.1

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

    dubbo源码分析系列

    dubbo 在不少java后台服务为主的公司应用很广泛。对dubbo 源码有深入的了解,可以加深rpc 的原理,顺带可以理解同类型的产品、...主要分析dubbo rpc spi cluster register 相关的源码;对dubbo的核心代码有详细的解读,

    dubbo 配置 loadbalance 不生效?撸一把源码(csdn)————程序.pdf

    案例中提到的问题就在于,XML文件和`application.properties`文件中都定义了`consumer`的相关属性,包括`loadbalance`,而Dubbo在整合Spring Boot时,会分别从这两个来源读取配置,导致可能出现后加载的配置覆盖前者...

    dubbo+cloud全链路灰度设计

    5. Dubbo扩展路由:基于dubbo routerFacory spi扩展dubbo的灰度路由机制。 6. Spring Cloud扩展路由:继承ZoneAvoidanceRule类进行灰度路由的扩展。 7. 染色流量传递:将入口的灰度流量参数一路传递到每个服务,支持...

Global site tag (gtag.js) - Google Analytics