1 xml配置
1.1 provider.xml示例
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><dubbo:application name="hello-world-app" /><dubbo:registry address="multicast://224.5.6.7:1234" /><dubbo:protocol name="dubbo" port="20880" /><dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoServiceLocal" /><dubbo:reference id="demoServiceRemote" interface="com.alibaba.dubbo.demo.DemoService" /></beans>
所有标签都支持自定义参数,用于不同扩展点实现的特殊配置,如:
<dubbo:protocol name="jms"><dubbo:parameter key="queue" value="your_queue" /></dubbo:protocol>或<dubbo:protocol name="jms" p:queue="your_queue" />
1.2 配置说明
| 标签 | 用途 | 解释 |
|---|---|---|
| 应用配置 | 用于配置当前应用信息,不管该应用是提供者还是消费者 | |
| 模块配置 | 用于配置当前模块信息,可选 | |
| 注册中心配置 | 用于配置连接注册中心相关信息 | |
| 服务配置 | 用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 | |
| 引用配置 | 用于创建一个远程服务代理,一个引用可以指向多个注册中心 | |
| 提供方配置 | 当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选 | |
| 消费方配置 | 当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选 | |
| 协议配置 | 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 | |
| 监控中心配置 | 用于配置连接监控中心相关信息,可选 | |
| 方法配置 | 用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息 | |
| 参数配置 | 用于指定方法参数配置 |
1.3 配置覆盖关系
- 方法级优先,接口级次之,全局配置再次之。
- 如果级别一样,则消费方优先,提供方次之。其中,服务提供方配置,通过 URL 经由注册中心传递给消费方。

建议由服务提供方设置超时,因为一个方法需要执行多长时间,服务提供方更清楚,如果一个消费方同时引用多个服务,就不需要关心每个服务的超时设置。
2 属性配置
如果公共配置很简单,没有多注册中心,多协议等情况,或者想多个 Spring 容器想共享配置,可以使用 dubbo.properties 作为缺省配置。Dubbo 将自动加载 classpath 根目录下的 dubbo.properties,可以通过JVM启动参数-Ddubbo.properties.file=xxx.properties改变缺省配置位置。
2.1 映射规则
将 XML 配置的标签名,加属性名,用点分隔,多个属性拆成多行,如下所示:
dubbo.application.name=foodubbo.application.owner=bardubbo.registry.address=10.20.153.10:9090
2.2 覆盖策略

- JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。
- XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效。
- Properties 最后,相当于缺省值,只有 XML 没有配置时,dubbo.properties 的相应配置项才会生效,通常用于共享公共配置,比如应用名。
- 如果 classpath 根目录下存在多个 dubbo.properties,比如多个 jar 包中有 dubbo.properties,Dubbo 会任意加载,并打印 Error 日志,后续可能改为抛异常。
- 协议的 id 没配时,缺省使用协议名作为 id
3 API配置
API 属性与配置项一对一,各属性含义,比如:ApplicationConfig.setName("xxx")对应<dubbo:application name="xxx" />
3.1 服务提供者
import com.alibaba.dubbo.rpc.config.ApplicationConfig;import com.alibaba.dubbo.rpc.config.RegistryConfig;import com.alibaba.dubbo.rpc.config.ProviderConfig;import com.alibaba.dubbo.rpc.config.ServiceConfig;import com.xxx.XxxService;import com.xxx.XxxServiceImpl;// 服务实现XxxService xxxService = new XxxServiceImpl();// 当前应用配置ApplicationConfig application = new ApplicationConfig();application.setName("xxx");// 连接注册中心配置RegistryConfig registry = new RegistryConfig();registry.setAddress("10.20.130.230:9090");registry.setUsername("aaa");registry.setPassword("bbb");// 服务提供者协议配置ProtocolConfig protocol = new ProtocolConfig();protocol.setName("dubbo");protocol.setPort(12345);protocol.setThreads(200);// 注意:ServiceConfig为重对象,内部封装了与注册中心的连接,以及开启服务端口// 服务提供者暴露服务配置ServiceConfig<XxxService> service = new ServiceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接,请自行缓存,否则可能造成内存和连接泄漏service.setApplication(application);service.setRegistry(registry); // 多个注册中心可以用setRegistries()service.setProtocol(protocol); // 多个协议可以用setProtocols()service.setInterface(XxxService.class);service.setRef(xxxService);service.setVersion("1.0.0");// 暴露及注册服务service.export();
3.2 服务消费者
import com.alibaba.dubbo.rpc.config.ApplicationConfig;import com.alibaba.dubbo.rpc.config.RegistryConfig;import com.alibaba.dubbo.rpc.config.ConsumerConfig;import com.alibaba.dubbo.rpc.config.ReferenceConfig;import com.xxx.XxxService;// 当前应用配置ApplicationConfig application = new ApplicationConfig();application.setName("yyy");// 连接注册中心配置RegistryConfig registry = new RegistryConfig();registry.setAddress("10.20.130.230:9090");registry.setUsername("aaa");registry.setPassword("bbb");// 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接// 引用远程服务ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏reference.setApplication(application);reference.setRegistry(registry); // 多个注册中心可以用setRegistries()reference.setInterface(XxxService.class);reference.setVersion("1.0.0");// 和本地bean一样使用xxxServiceXxxService xxxService = reference.get(); // 注意:此代理对象内部封装了所有通讯细节,对象较重,请缓存复用
3.3 方法级别配置
...// 方法级配置List<MethodConfig> methods = new ArrayList<MethodConfig>();MethodConfig method = new MethodConfig();method.setName("createXxx");method.setTimeout(10000);method.setRetries(0);methods.add(method);// 引用远程服务ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏...reference.setMethods(methods); // 设置方法级配置...
3.4 点对点直连
...ReferenceConfig<XxxService> reference = new ReferenceConfig<XxxService>(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏// 如果点对点直连,可以用reference.setUrl()指定目标地址,设置url后将绕过注册中心,// 其中,协议对应provider.setProtocol()的值,端口对应provider.setPort()的值,// 路径对应service.setPath()的值,如果未设置path,缺省path为接口名reference.setUrl("dubbo://10.20.130.230:20880/com.xxx.XxxService");...
3.5 API配置参考手册
// 配置 APIcom.alibaba.dubbo.config.ServiceConfigcom.alibaba.dubbo.config.ReferenceConfigcom.alibaba.dubbo.config.ProtocolConfigcom.alibaba.dubbo.config.RegistryConfigcom.alibaba.dubbo.config.MonitorConfigcom.alibaba.dubbo.config.ApplicationConfigcom.alibaba.dubbo.config.ModuleConfigcom.alibaba.dubbo.config.ProviderConfigcom.alibaba.dubbo.config.ConsumerConfigcom.alibaba.dubbo.config.MethodConfigcom.alibaba.dubbo.config.ArgumentConfig// 注解 APIcom.alibaba.dubbo.config.annotation.Servicecom.alibaba.dubbo.config.annotation.Reference// 模型 APIcom.alibaba.dubbo.common.URLcom.alibaba.dubbo.rpc.RpcException// 上下文 APIcom.alibaba.dubbo.rpc.RpcContext// 服务APIcom.alibaba.dubbo.rpc.service.GenericServicecom.alibaba.dubbo.rpc.service.GenericExceptionalibaba.dubbo.rpc.service.EchoService
API使用范围说明:API 仅用于 OpenAPI, ESB, Test, Mock 等系统集成,普通服务提供方或消费方,请采用XML 配置方式使用 Dubbo
4 注解配置
4.1 服务提供者
4.1.1 Service注解暴露服务
@Service(timeout = 5000)public class AnnotateServiceImpl implements AnnotateService {// ...}
4.1.2 javaConfig形式配置公共模块
@Configurationpublic class DubboConfiguration {@Beanpublic ApplicationConfig applicationConfig() {ApplicationConfig applicationConfig = new ApplicationConfig();applicationConfig.setName("provider-test");return applicationConfig;}@Beanpublic RegistryConfig registryConfig() {RegistryConfig registryConfig = new RegistryConfig();registryConfig.setAddress("zookeeper://127.0.0.1:2181");registryConfig.setClient("curator");return registryConfig;}}
4.1.3 指定dubbo扫描路径
@SpringBootApplication@DubboComponentScan(basePackages = "com.alibaba.dubbo.test.service.impl")public class ProviderTestApp {// ...}
4.2 服务消费者
4.2.1 Reference注解引用服务
public class AnnotationConsumeService {@com.alibaba.dubbo.config.annotation.Referencepublic AnnotateService annotateService;// ...}
4.2.2 javaConfig形式配置公共模块
@Configurationpublic class DubboConfiguration {@Beanpublic ApplicationConfig applicationConfig() {ApplicationConfig applicationConfig = new ApplicationConfig();applicationConfig.setName("consumer-test");return applicationConfig;}@Beanpublic ConsumerConfig consumerConfig() {ConsumerConfig consumerConfig = new ConsumerConfig();consumerConfig.setTimeout(3000);return consumerConfig;}@Beanpublic RegistryConfig registryConfig() {RegistryConfig registryConfig = new RegistryConfig();registryConfig.setAddress("zookeeper://127.0.0.1:2181");registryConfig.setClient("curator");return registryConfig;}}
4.2.3 指定dubbo扫描路径
@SpringBootApplication@DubboComponentScan(basePackages = "com.alibaba.dubbo.test.service")public class ConsumerTestApp {// ...}
