我是靠谱客的博主 疯狂萝莉,最近开发中收集的这篇文章主要介绍掌握Dubbo:从认识SPI开始,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Dubbo是一个出名的分布式框架,其使用广泛,很多公司直接使用或者进行封装成自己的框架。其架构较为复杂,学习成本比spring cloud要高。针对想要快速掌握该框架的使用,我觉得可以从高频出现的SPI入手。

一、SPI是什么?

SPI,全称service provider interface,中文含义是服务发现机制。对于有分布式开发经验的小伙伴,应该对概念相当熟悉,对于服务调用者来说,需要先得到服务的信息,方可进行有效的调用。

SPI是通过接口全限定名找到指定目录下对应文件,并获取文件中的具体实现类信息并进行加载,这样就可以达到灵活替换具体实现类。

也许上面的描述比较干巴巴,我们就用通俗的话来说:

在常规情况下,接口的规范和实现是实现方来决定,调用方没法选择不同的实现。而SPI则对此进行一定程度的反转,让调用方来指定接口规范,并提供外部实现,在此基础上,调用方可以根据自己的需要来选择自己所需的具体实现。

Java为框架拓展人员提供了一套接口(API),用来启用框架的扩展和替换组件,而SPI可以是则是用来帮助这些的API寻找服务实现。

二、Java SPI的机制

Java 实现SPI的核心类是ServiceLoader,通过它加载类加载器,然后创建LazyIteator(用于扫描Meta-INF/services,这个目录下所有配置文件并解析文件中配置的服务名),最后通过反射的方式把服务名对应的类进行加载,完成实例化后将它们加载到缓存中。

从上述过程来看,Java spi机制的优缺点均比较明显:

1、优点:实现解耦,让接口定义和具体实现进行分离。

2、缺点:

      a.不能按需加载,只能把所有配置的服务实现都加载到缓存,浪费空间。

      b.获取服务实现类方式不灵活,只能是通过LayzIterator去获取,而非通过参数来获取。

      c.ServiceLoaderx非线程安全。

三、Duboo SPI机制

Duboo作为一款高可扩展的RPC框架,其SPI机制在Java SPI的基础上进行了改造。主要的改造点带有明显的IOC和AOP的痕迹。

首先,我们要掌握其中几个重要的概念:

1.扩展点

    对应一个接口

2.扩展

   扩展点/接口的实现

3.扩展自适应实例

   就是一个扩展(Extension)的代理,其实现了扩展点的接口。在调用扩展点方法的时候,由传入的参数来决定使用哪个扩展。而duboo框架会根据接口的参数,来自动选择所需的实现。

4.@SPI

  作用于扩展点接口上的注解,表明该接口是一个扩展点。

5.@Adaptive

  该注解于扩展接口的方法上,表明该接口是一个自适应方法。duboo会在扩展点生成自适应实例时,把带有该注释的方法生成 类型对应的代码。

其次,duboo读取配置文件

duboo spi基于Java spi,因此也是从某个固定的路径去进行配置文件的加载和解析。不过其配置与property文件类似,内容key-value形式。

最后,duboo spi的主要流程如下图,当中ExtensionLoader与ServiceLoader类似,封装了duboo的spi实现逻辑,大家可以从该类的源码入手,根据给出的流程图去体会下其编码思想。

关于SPI就介绍到这里,deboo框架分层较细,达10层,大致可以分为API和SPI两部分,API层是最上的两层,主要给开发人员进行编码使用。而SPI层则封装了很多RPC服务调用的核心,建议大家先对duboo SPI有所了解,才能更好地掌握duboo框架思想。

 

 

最后

以上就是疯狂萝莉为你收集整理的掌握Dubbo:从认识SPI开始的全部内容,希望文章能够帮你解决掌握Dubbo:从认识SPI开始所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部