Apache Dubbo 配置参数详解

系统梳理 Apache Dubbo 3.2.20 的核心配置参数,逐项说明应用级、协议、注册中心、服务端与客户端通用参数以及 QoS 端口、线程池与序列化选项的取值、默认值与含义,并给出 XML、YAML、API 与注解四种配置对照。

Apache DubboApache Dubbo2026/10/12

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。同一参数多处配置时,粒度更细者优先(方法级 > 接口级 > 全局级)。

1.1 四种配置方式对照

方式典型写法适用场景
XML<dubbo:protocol name="dubbo" port="20880"/>传统 Spring 工程
YAMLdubbo.protocol.port: 20880Spring Boot 工程
APIservice.setProtocol(new ProtocolConfig("dubbo", 20880))纯 Java main
注解@DubboService(timeout = 3000)声明式开发

1.2 属性命名转换规则

XML 中的 camelCase 参数在 YAML/properties 中转为 kebab-case。例如 preferSerialization 在 YAML 中写作 prefer-serialization,executorManagementMode 写作 executor-management-mode。

二、应用级配置(dubbo.application.*)

2.1 核心参数

参数取值示例默认值含义
dubbo.application.namedubbo-demo-provider无(必填)应用名,用于服务治理与依赖关系展示
dubbo.application.qos-enabletruetrue是否开启 QoS 运维控制台
dubbo.application.qos-port2222222222QoS 控制台监听端口
dubbo.application.qos-accept-foreign-ipfalsefalse是否允许非本机 IP 接入 QoS
dubbo.application.register-modeall / interface / instanceall服务注册粒度(3.x 应用级/接口级)
dubbo.application.enable-file-cachetruetrue是否缓存注册中心地址到本地文件
dubbo.application.executor-management-modeisolation / allisolation线程池隔离模式

2.2 示例

dubbo:
  application:
    name: dubbo-demo-provider
    qos-enable: true
    qos-port: 22222
    register-mode: all

三、协议配置(dubbo.protocol.*)

3.1 核心参数

参数取值示例默认值含义
dubbo.protocol.namedubbo / tri / restdubbo协议类型;dubbo 为默认长连接二进制协议
dubbo.protocol.port2088020880协议监听端口;-1 表示自动分配
dubbo.protocol.threadpoolfixed / cached / limitedfixed协议层线程池类型
dubbo.protocol.threads200200业务线程数
dubbo.protocol.queues00线程池队列长度,0 表示 SynchronousQueue
dubbo.protocol.serializationhessian2 / fastjson2 / protostuffhessian2序列化方式
dubbo.protocol.prefer-serializationfastjson2,hessian2由版本决定优先序列化列表(实测默认 fastjson2,hessian2)
dubbo.protocol.accepts00最大可接受连接数,0 表示不限制
dubbo.protocol.iothreads0CPU+1Netty IO 线程数
dubbo.protocol.heartbeat6000060000心跳间隔(毫秒)
dubbo.protocol.payload83886088388608单次请求最大载荷(字节,默认 8MB)

3.2 序列化选择说明

  • hessian2:Dubbo 协议默认的二进制序列化,跨语言、体积小、兼容性好,是生产默认值;
  • fastjson2:JSON 文本序列化,便于排查报文,但在 3.2 中作为优先项之一参与协商;
  • 多协议/多序列化可并存,由两端按 prefer-serialization 顺序协商。

3.3 示例

dubbo:
  protocol:
    name: dubbo
    port: 20880
    serialization: hessian2
    threads: 200
    threadpool: fixed
    heartbeat: 60000

四、注册中心配置(dubbo.registry.*)

4.1 核心参数

参数取值示例默认值含义
dubbo.registry.addresszookeeper://127.0.0.1:2181无注册中心地址;N/A 表示不使用注册中心(直连)
dubbo.registry.protocolzookeeper / nacos / multicast由 address 推断注册中心协议
dubbo.registry.checktrue / falsetrue启动时是否检查注册中心可用
dubbo.registry.registertruetrue是否将本应用注册到注册中心
dubbo.registry.subscribetruetrue是否订阅注册中心的服务列表
dubbo.registry.groupdubbo无注册分组
dubbo.registry.timeout50005000注册中心操作超时(毫秒)

4.2 直连模式

无需注册中心时,将地址设为 N/A(对应常量 RegistryConfig.NO_AVAILABLE),provider 直接暴露、consumer 通过 url 直接连接:

dubbo:
  registry:
    address: N/A

五、服务端与客户端参数(dubbo.provider.* / dubbo.consumer.*)

5.1 超时与重试

参数取值示例默认值含义
timeout30001000调用超时(毫秒);方法级 > 接口级 > 全局
retries22失败重试次数(不含首次调用);幂等接口才可提高
clusterfailover / failfast / failsafefailover集群容错策略
connections00每个 provider 的长连接数,0 表示共享连接

5.2 负载均衡

参数取值示例默认值含义
loadbalancerandom / roundrobin / leastactive / consistenthashrandom负载均衡策略
actives00每客户端并发调用上限,0 表示不限制

5.3 服务端/客户端其他常用项

参数默认值含义
provider.threads200provider 侧业务线程数
consumer.checktrue启动时是否校验依赖服务可用
consumer.stickyfalse是否使用粘滞连接(实测默认 false)
provider.dynamictrue服务是否动态注册(可被 QoS 上下线)
consumer.lazyfalse是否延迟创建连接

5.4 示例

dubbo:
  provider:
    timeout: 3000
    retries: 2
    loadbalance: random
  consumer:
    timeout: 3000
    retries: 2
    check: false

六、QoS 运维端口配置

QoS(Quality of Service)控制台是 Dubbo 自 2.5.8 起内置的运维命令行,默认监听 22222,可通过 telnet 或 TCP 直连使用。

参数默认值含义
dubbo.application.qos-enabletrue是否启用 QoS
dubbo.application.qos-port22222监听端口
dubbo.application.qos-accept-foreign-ipfalse是否接受非本机连接
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 接入。

七、线程池与序列化配置

7.1 线程池

Dubbo 默认使用 fixed 类型线程池,业务线程数由 threads 控制,线程池管理模型由 executor-management-mode 控制:

参数默认值含义
dubbo.protocol.threadpoolfixedfixed 固定大小、cached 缓存、limited 可伸缩但不超过 threads
dubbo.protocol.threads200业务线程数上限
dubbo.protocol.queues0等待队列长度
dubbo.protocol.iothreadsCPU+1Netty IO 线程数
dubbo.application.executor-management-modeisolation每个应用独立管理线程池

7.2 序列化

参数默认值含义
dubbo.protocol.serializationhessian2指定单一序列化方式
dubbo.protocol.prefer-serializationfastjson2,hessian2优先序列化列表(按顺序协商)
dubbo.protocol.optimize-serializationtrue自动选择高效率序列化包

7.3 JVM 堆建议

Dubbo 本身不常驻大量堆内存,建议为运行进程设置合理的堆上限,示例:-Xms256m -Xmx512m。

八、参数速查表

作用域参数默认值常用取值
applicationname无应用唯一名
applicationqos-port22222运维端口
protocolnamedubbodubbo / tri
protocolport20880服务端口
protocolserializationhessian2hessian2 / fastjson2
protocolthreads200业务线程数
protocolheartbeat60000心跳毫秒
registryaddress无N/A 或注册中心地址
provider/consumertimeout10003000
provider/consumerretries20~3
provider/consumerloadbalancerandomrandom / roundrobin
provider/consumerclusterfailover容错策略