自定义扩展

演示如何使用 Dubbo 的可扩展性功能。

Dubbo 的可扩展性设计理念

  • 平等对待第三方实现:在 Dubbo 中,所有内部和外部实现都被平等对待。用户可以根据其业务需求替换 Dubbo 的原生实现。
  • 每个扩展点只封装一个可变因素,以实现最大程度的复用:每个扩展点的实现者通常只关注一件事。如果用户需要扩展功能,他们只需要扩展相关的扩展点,从而显著减少工作量。

基于 Java SPI 的可扩展性设计

Dubbo 的可扩展性源于 JDK 标准 SPI(服务提供者接口)的增强版本。它改进了 JDK 标准 SPI 的以下问题

  • 标准 SPI 同时实例化所有扩展点,如果某些扩展点未使用,就会浪费资源。
  • 如果扩展点加载失败,甚至无法检索扩展点的名称。

Dubbo 的可扩展性功能

  • 按需加载:Dubbo 不会同时实例化所有实现,从而减少资源浪费。
  • IOC(控制反转)功能:Dubbo 不仅发现扩展服务实现类,还会自动将依赖对象注入到扩展类中。
  • AOP(面向切面编程)功能:Dubbo 自动发现扩展的包装类,构造它们以增强扩展功能。
  • 动态扩展选择:Dubbo 在运行时根据参数动态选择相应的扩展类。
  • 扩展实现排序:用户可以指定扩展实现的执行顺序。
  • 自适应扩展点:扩展可以在消费者或提供者端生效。

扩展加载过程

Dubbo 的扩展加载过程如下

//imgs/v3/concepts/extension-load.png

主要步骤是

  • 读取和解析配置文件
  • 缓存所有扩展实现
  • 根据用户执行的扩展名称实例化相应的扩展实现
  • 对扩展实例属性执行 IOC 注入,并为 AOP 功能实例化扩展包装类

任务项

接下来,让我们通过以下任务项介绍 Dubbo 的可扩展性功能。

自定义过滤器

通过 SPI 机制动态加载自定义过滤器,以统一处理、验证返回结果,并最大程度地减少开发人员的干扰。

自定义路由

根据实际用例自定义服务调用期间的路由策略,以有效提高服务吞吐量和延迟。

自定义协议

对不同的异构系统使用自定义传输协议,以消除协议之间的差异,促进系统集成。

自定义注册中心

将来自不同注册中心的服務纳入 Dubbo 生态系统。自定义注册中心是连接不同服务生态系统的关键。


Dubbo 的可扩展性设计旨在为用户提供高度灵活的扩展机制,提供动态扩展选择、IOC 和 AOP 等功能。这使得 Dubbo 更容易适应各种场景,并将其集成到不同的技术栈中。


上次修改时间:2023 年 11 月 1 日:翻译扩展相关文档 (#2844) (e603103c03a)