Dubbo SPI机制!

配置总线URL

Dubbo 中任意的一个实现都可以抽象为一个 URL,Dubbo 使用 URL 来统一描述了所有对象和配置信息。

  • protocol:dubbo 协议。
  • username/password:用户名和密码。
  • host/port:172.17.32.91:20880。
  • pathorg.apache.dubbo.demo.DemoService
  • parameters:参数键值对。
1
dubbo://172.17.32.91:20880/org.apache.dubbo.demo.DemoService?anyhost=true&application=dubbo-demo-api-provider&dubbo=2.0.2&interface=org.apache.dubbo.demo.DemoService&methods=sayHello,sayHelloAsync&pid=32508&release=&side=provider&timestamp=1593253404714dubbo://172.17.32.91:20880/org.apache.dubbo.demo.DemoService?anyhost=true&application=dubbo-demo-api-provider&dubbo=2.0.2&interface=org.apache.dubbo.demo.DemoService&methods=sayHello,sayHelloAsync&pid=32508&release=&side=provider&timestamp=1593253404714

SPI机制

Dubbo 按照 SPI 配置文件的用途,分成了三类目录。

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

Dubbo 将 SPI 配置文件改成了 KV 格式,例如:

1
dubbo=org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol

key:扩展名(也就是 ExtensionName)

  • 当我们在为一个接口查找具体实现类时,可以指定扩展名来选择相应的扩展实现。

例如,这里指定扩展名为 dubbo,Dubbo SPI 就知道要使用:

org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol这个扩展实现类

  • 只实例化这一个扩展实现即可,无须实例化 SPI 配置文件中的其他扩展实现类。