自定义 SPI 扩展的基本步骤

Dubbo 的 SPI 插件扩展机制说明,讲解自定义 SPI 扩展的基本步骤。

下面以 RPC 协议插件 为例,说明如何利用 Dubbo 提供的 SPI 插件提供一个自定义的 RPC 协议实现。如果想了解 SPI 机制的工作原理以及框架内置的 SPI 扩展点列表,请查看 参考手册 - SPI扩展

1. 提供 SPI 插件实现类

提供一个 Java 类实现 org.apache.dubbo.rpc.Protocol 接口。

  1. package com.spi.demo;
  2. import org.apache.dubbo.rpc.Protocol;
  3. @Activate
  4. public class CustomizedProtocol implements Protocol {
  5. // ...
  6. }

2. 在指定文件配置实现类

在应用 resources/META-INF/services/ 目录下添加 org.apache.dubbo.rpc.Protocol 文件,文件中增加如下配置:

  1. customized=com.spi.demo.CustomizedProtocol

配置注意事项

  • 文件名必须为 SPI 插件定义的 package 全路径名,具体取决于你要扩展的 SPI 定义,如示例中的 resources/META-INF/services/org.apache.dubbo.rpc.Protocol
  • 文件中的内容必须是 key=value 形式,其中 key 可随便定义,但建议增加特定前缀以避免与 Dubbo 内置实现重名,value 必须设置为扩展类实现的全路径名。

3. 通过配置启用自定义协议实现

在应用中修改协议配置,告诉 Dubbo 框架使用自定义协议:

  1. # 使用 Spring Boot,可修改 application.yml 或 application.properties
  2. dubbo
  3. protocol
  4. name: customized

或者

  1. ProtocolConfig protocol = new ProtocolConfig();
  2. protocol.setName("cutomized");

4. 更多示例

如果你想了解更完整示例,请查看本目录下的其他示例:

最后修改 September 13, 2024: Refactor website structure (#2860) (1a4b998f54b)