Dubbo SPI机制!
Dubbo SPI机制!
月伴飞鱼配置总线URL
Dubbo 中任意的一个实现都可以抽象为一个 URL,Dubbo 使用 URL 来统一描述了所有对象和配置信息。
protocol
:dubbo 协议。username/password
:用户名和密码。host/port
:172.17.32.91:20880。path
:org.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×tamp=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×tamp=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 配置文件中的其他扩展实现类。