跳转至

Dubbo 配置设计思路(阿里)

一、配置来源

Dubbo 配置可以从多个来源读取,按优先级从高到低:

  1. 方法级参数@Reference(methods=...)
  2. 接口级配置
  3. 应用级配置
  4. 全局配置dubbo.properties
  5. 外部配置中心(Nacos / Apollo)
  6. 默认值

二、配置分类

1. 服务配置(ServiceConfig)

服务端暴露的服务信息:接口名、版本、分组、协议。

2. 引用配置(ReferenceConfig)

客户端引用服务的信息:超时、重试、Mock。

3. 协议配置(ProtocolConfig)

dubbo / rest / http 协议,端口、线程池。

4. 注册中心配置(RegistryConfig)

地址、协议。

5. 应用配置(ApplicationConfig)

应用名、负责人、元数据。

三、设计亮点

1. 外部化配置

所有配置可以放到 Nacos / Apollo,应用启动时拉取。改超时、改权重不需要重启。

2. 覆盖关系

方法级 > 接口级 > 全局

允许在 dubbo.properties 里覆盖任意配置:

dubbo.reference.com.example.UserService.timeout=5000
dubbo.service.com.example.OrderService.retries=0

3. 配置合并

启动时把多个来源的配置合并成一个最终 URL,传给 Dubbo 的各个扩展点。

4. 动态配置

注册中心中的配置可以运行时推送,不改代码就能调权重、超时、限流。

四、典型配置示例

dubbo:
  application:
    name: order-service
  registry:
    address: nacos://127.0.0.1:8848
  protocol:
    name: dubbo
    port: 20880
  provider:
    timeout: 3000
    retries: 0
  consumer:
    timeout: 1000
    check: false

五、扩展思路

  • 灰度发布:给不同机器打不同 version,按 tag 路由。
  • 读写分离:给读服务配小超时,写服务配大超时。
  • 限流降级:动态配置开关。

面试加分

  • Dubbo 把所有配置都建模成 URL 参数,SPI 通过 URL 获取配置,这是它可扩展的核心。
  • 配置优先级理解了,就能解释"为什么我在 A 配了 3000,B 里配了 1000,最终是多少"。