蚂蚁金服RPC框架sofa-rpc之微内核设计SPI机制

    sofa-rpc 的SPI机制和dubbo的SPI机制都是同源于java的SPI,通过SPI你可以在不改变内核任何源码的情况下进行扩展,甚至替换组件。

    java的spi,可以通过博文

https://docs.oracle.com/javase/tutorial/ext/basics/spi.html 与https://www.developer.com/java/article.php/3848881/Service-Provider-Interface-Creating-Extensible-Java-Applications.htm 对其基本了解。

sofa-rpc 的SPI的功能主要关键点:

(1)引入注解@Extensible

        代表这个抽象类或者接口是可扩展的,可以配置指定自定义扩展文件名称,默认就是全类名;扩展类是否使用单例,默认使用。


(2)引入注解@Extension

        标识该类是一个扩展实现类,可以指定扩展点的名字,也可以在扩展点文件中指定,不过同时指定,名字必须相同。


(3)扩展点配置文件默认路径:META-INF/services/sofa-rpc/、META-INF/services/


   当然,sofa-rpc也支持自定义这些路径(除非必要,建议按默认约定)。路径当然和java 和dubbo的路径是不同的。蚂蚁金服RPC框架sofa-rpc之微内核设计SPI机制_第1张图片


(4)ExtensionClass:

    代码扩展接口实现类,从配置文件读取路径,并结合注解Extension而生成的。


(5)ExtensionLoader

    一个可扩展接口类,对应一个加载器;主要职责是从配置路径中读取并实例化一个可扩展接口的所有实现类。


(6)ExtensionLoaderFactory

    ExtensionLoader的工程类,并且做了ExtensionLoader的缓存。


   sofa-rpc 已知的扩展:


蚂蚁金服RPC框架sofa-rpc之微内核设计SPI机制_第2张图片


具体例子见:https://github.com/alipay/sofa-rpc/wiki/Extension-Loader

及https://github.com/sdcuike/sofa-rpc-demo/blob/master/src/main/java/com/sdcuike/extensionloader/DemoSeviceLoaderMain.java






你可能感兴趣的:(Microservices,微服务-RPC)