Apache Dubbo 配置参数详解
Dubbo 的配置项按作用域可分为:应用级(application)、协议级(protocol)、注册中心级(registry)、方法/服务级(provider / consumer)以及运维级(QoS)。本文以 dubbo 3.2.20 为准,逐项说明常用参数的取值、默认值与含义。文中的默认值可在服务运行后通过 QoS 控制台的 getConfig 命令回显核对,实测示例:
<dubbo:application enableFileCache="true" executorManagementMode="isolation" parameters="{}" name="dubbo-demo-provider" protocol="dubbo" />
<dubbo:protocol preferSerialization="fastjson2,hessian2" port="20880" name="dubbo" />
<dubbo:registry port="0" address="N/A" />
Dubbo 支持四种等价配置方式,覆盖优先级由高到低通常为:API 配置 > 注解 > XML/YAML 配置文件 > dubbo.properties。同一参数多处配置时,粒度更细者优先(方法级 > 接口级 > 全局级)。
| 方式 | 典型写法 | 适用场景 |
|---|
| XML | <dubbo:protocol name="dubbo" port="20880"/> | 传统 Spring 工程 |
| YAML | dubbo.protocol.port: 20880 | Spring Boot 工程 |
| API | service.setProtocol(new ProtocolConfig("dubbo", 20880)) | 纯 Java main |
| 注解 | @DubboService(timeout = 3000) | 声明式开发 |
XML 中的 camelCase 参数在 YAML/properties 中转为 kebab-case。例如 preferSerialization 在 YAML 中写作 prefer-serialization,executorManagementMode 写作 executor-management-mode。
| 参数 | 取值示例 | 默认值 | 含义 |
|---|
dubbo.application.name | dubbo-demo-provider | 无(必填) | 应用名,用于服务治理与依赖关系展示 |
dubbo.application.qos-enable | true | true | 是否开启 QoS 运维控制台 |
dubbo.application.qos-port | 22222 | 22222 | QoS 控制台监听端口 |
dubbo.application.qos-accept-foreign-ip | false | false | 是否允许非本机 IP 接入 QoS |
dubbo.application.register-mode | all / interface / instance | all | 服务注册粒度(3.x 应用级/接口级) |
dubbo.application.enable-file-cache | true | true | 是否缓存注册中心地址到本地文件 |
dubbo.application.executor-management-mode | isolation / all | isolation | 线程池隔离模式 |
dubbo:
application:
name: dubbo-demo-provider
qos-enable: true
qos-port: 22222
register-mode: all
| 参数 | 取值示例 | 默认值 | 含义 |
|---|
dubbo.protocol.name | dubbo / tri / rest | dubbo | 协议类型;dubbo 为默认长连接二进制协议 |
dubbo.protocol.port | 20880 | 20880 | 协议监听端口;-1 表示自动分配 |
dubbo.protocol.threadpool | fixed / cached / limited | fixed | 协议层线程池类型 |
dubbo.protocol.threads | 200 | 200 | 业务线程数 |
dubbo.protocol.queues | 0 | 0 | 线程池队列长度,0 表示 SynchronousQueue |
dubbo.protocol.serialization | hessian2 / fastjson2 / protostuff | hessian2 | 序列化方式 |
dubbo.protocol.prefer-serialization | fastjson2,hessian2 | 由版本决定 | 优先序列化列表(实测默认 fastjson2,hessian2) |
dubbo.protocol.accepts | 0 | 0 | 最大可接受连接数,0 表示不限制 |
dubbo.protocol.iothreads | 0 | CPU+1 | Netty IO 线程数 |
dubbo.protocol.heartbeat | 60000 | 60000 | 心跳间隔(毫秒) |
dubbo.protocol.payload | 8388608 | 8388608 | 单次请求最大载荷(字节,默认 8MB) |
hessian2:Dubbo 协议默认的二进制序列化,跨语言、体积小、兼容性好,是生产默认值;
fastjson2:JSON 文本序列化,便于排查报文,但在 3.2 中作为优先项之一参与协商;
- 多协议/多序列化可并存,由两端按
prefer-serialization 顺序协商。
dubbo:
protocol:
name: dubbo
port: 20880
serialization: hessian2
threads: 200
threadpool: fixed
heartbeat: 60000
| 参数 | 取值示例 | 默认值 | 含义 |
|---|
dubbo.registry.address | zookeeper://127.0.0.1:2181 | 无 | 注册中心地址;N/A 表示不使用注册中心(直连) |
dubbo.registry.protocol | zookeeper / nacos / multicast | 由 address 推断 | 注册中心协议 |
dubbo.registry.check | true / false | true | 启动时是否检查注册中心可用 |
dubbo.registry.register | true | true | 是否将本应用注册到注册中心 |
dubbo.registry.subscribe | true | true | 是否订阅注册中心的服务列表 |
dubbo.registry.group | dubbo | 无 | 注册分组 |
dubbo.registry.timeout | 5000 | 5000 | 注册中心操作超时(毫秒) |
无需注册中心时,将地址设为 N/A(对应常量 RegistryConfig.NO_AVAILABLE),provider 直接暴露、consumer 通过 url 直接连接:
dubbo:
registry:
address: N/A
| 参数 | 取值示例 | 默认值 | 含义 |
|---|
timeout | 3000 | 1000 | 调用超时(毫秒);方法级 > 接口级 > 全局 |
retries | 2 | 2 | 失败重试次数(不含首次调用);幂等接口才可提高 |
cluster | failover / failfast / failsafe | failover | 集群容错策略 |
connections | 0 | 0 | 每个 provider 的长连接数,0 表示共享连接 |
| 参数 | 取值示例 | 默认值 | 含义 |
|---|
loadbalance | random / roundrobin / leastactive / consistenthash | random | 负载均衡策略 |
actives | 0 | 0 | 每客户端并发调用上限,0 表示不限制 |
| 参数 | 默认值 | 含义 |
|---|
provider.threads | 200 | provider 侧业务线程数 |
consumer.check | true | 启动时是否校验依赖服务可用 |
consumer.sticky | false | 是否使用粘滞连接(实测默认 false) |
provider.dynamic | true | 服务是否动态注册(可被 QoS 上下线) |
consumer.lazy | false | 是否延迟创建连接 |
dubbo:
provider:
timeout: 3000
retries: 2
loadbalance: random
consumer:
timeout: 3000
retries: 2
check: false
QoS(Quality of Service)控制台是 Dubbo 自 2.5.8 起内置的运维命令行,默认监听 22222,可通过 telnet 或 TCP 直连使用。
| 参数 | 默认值 | 含义 |
|---|
dubbo.application.qos-enable | true | 是否启用 QoS |
dubbo.application.qos-port | 22222 | 监听端口 |
dubbo.application.qos-accept-foreign-ip | false | 是否接受非本机连接 |
dubbo.application.qos-accept-foreign-ip-whitelist | 空 | 允许接入的远端 IP 白名单 |
实测端口监听(ss -lntp):
LISTEN 0 4096 *:20880 *:* users:(("java",pid=5366,fd=186))
LISTEN 0 4096 *:22222 *:* users:(("java",pid=5366,fd=157))
生产环境若不希望暴露运维端口,可设置 qos-enable: false,或仅允许本机 127.0.0.1 接入。
Dubbo 默认使用 fixed 类型线程池,业务线程数由 threads 控制,线程池管理模型由 executor-management-mode 控制:
| 参数 | 默认值 | 含义 |
|---|
dubbo.protocol.threadpool | fixed | fixed 固定大小、cached 缓存、limited 可伸缩但不超过 threads |
dubbo.protocol.threads | 200 | 业务线程数上限 |
dubbo.protocol.queues | 0 | 等待队列长度 |
dubbo.protocol.iothreads | CPU+1 | Netty IO 线程数 |
dubbo.application.executor-management-mode | isolation | 每个应用独立管理线程池 |
| 参数 | 默认值 | 含义 |
|---|
dubbo.protocol.serialization | hessian2 | 指定单一序列化方式 |
dubbo.protocol.prefer-serialization | fastjson2,hessian2 | 优先序列化列表(按顺序协商) |
dubbo.protocol.optimize-serialization | true | 自动选择高效率序列化包 |
Dubbo 本身不常驻大量堆内存,建议为运行进程设置合理的堆上限,示例:-Xms256m -Xmx512m。
| 作用域 | 参数 | 默认值 | 常用取值 |
|---|
| application | name | 无 | 应用唯一名 |
| application | qos-port | 22222 | 运维端口 |
| protocol | name | dubbo | dubbo / tri |
| protocol | port | 20880 | 服务端口 |
| protocol | serialization | hessian2 | hessian2 / fastjson2 |
| protocol | threads | 200 | 业务线程数 |
| protocol | heartbeat | 60000 | 心跳毫秒 |
| registry | address | 无 | N/A 或注册中心地址 |
| provider/consumer | timeout | 1000 | 3000 |
| provider/consumer | retries | 2 | 0~3 |
| provider/consumer | loadbalance | random | random / roundrobin |
| provider/consumer | cluster | failover | 容错策略 |