Dubbo 配置设计思路(阿里)¶
一、配置来源¶
Dubbo 配置可以从多个来源读取,按优先级从高到低:
- 方法级参数(
@Reference(methods=...)) - 接口级配置
- 应用级配置
- 全局配置(
dubbo.properties) - 外部配置中心(Nacos / Apollo)
- 默认值
二、配置分类¶
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,最终是多少"。