配置
XML配置
常见配置
标签 | 用途 | 解释 |
---|---|---|
<dubbo:service/> | 服务配置 | 用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 |
<dubbo:reference/> | 引用配置 | 用于创建一个远程服务代理,一个引用可以指向多个注册中心 |
<dubbo:protocol/> | 协议配置 | 用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受 |
<dubbo:application/> | 应用配置 | 用于配置当前应用信息,不管该应用是提供者还是消费者 |
<dubbo:monitor/> | 监控中心配置 | 用于配置连接监控中心相关信息,可选 |
<dubbo:provider/> | 提供方配置 | 当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选 |
<dubbo:consumer/> | 消费方配置 | 当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选 |
<dubbo:method/> | 方法配置 | 用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息 |
<dubbo:argument/> | 参数配置 | 用于指定方法参数配置 |
不同粒度配置的覆盖关系
以timeout为例,下图显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似:
- 方法及优先,接口级次之,全局配置再次之。
- 如果级别一样,则消费方优先,提供方次之。
其中,服务提供方配置,通过 URL 经由注册中心传递给消费方。
建议由服务提供方设置超时,因为一个方法需要执行多久,服务提供者更加清楚,如果一个消费者同时引用多个服务,就不需要关心每个服务的超时设置。
理论上ReferenceConfig中除了interface这一项,其他都可以缺省不配置,框架会自动使用ConsumerConfig,ServiceConfig,ProviderConfig等提供的缺省配置。
动态配置中心
配置中心在Dubbo中承担两个职责:
- 外部化配置,启动配置的集中式存储。
- 服务治理,服务治理规则的存储与通知。
属性配置
如果你的应用足够简单,例如,不需要多注册中心或多协议,并且需要在spring容器中共享配置,那么,我们可以直接使用 dubbo.properties 作为默认配置。
Dubbo 可以自动加载 classpath 根目录下的 dubbo.properties,但是你同样可以使用 JVM 参数来指定路径:-Ddubbo.properties.file=xxx.properties。
映射规则
可以将 xml 的 tag 名和属性名组合起来,用 ‘.’ 分隔。每行一个属性。
- dubbo.application.name=foo 相当于 <dubbo:application name=“foo” />
- dubbo.registry.address=10.20.153.10:9090 相当于 <dubbo:registry address=“10.20.153.10:9090” />
如果在 xml 配置中有超过一个的 tag,那么你可以使用 ‘id’ 进行区分。如果你不指定 id,它将作用于所有 tag。
- dubbo.protocol.rmi.port=1099 相当于 <dubbo:protocol id=“rmi” name=“rmi” port=“1099” />
- dubbo.registry.china.address=10.20.153.10:9090 相当于 <dubbo:registry id=“china” address=“10.20.153.10:9090” />
重写与优先级
优先级从高到低:
- JVM -D 参数:当你部署或者启动应用时,它可以轻易地重写配置,比如,改变 dubbo 协议端口;
- XML:XML 中的当前配置会重写 dubbo.properties 中的;
- Properties:默认配置,仅仅作用于以上两者没有配置时。
1.如果在 classpath 下有超过一个 dubbo.properties 文件,比如,两个 jar 包都各自包含了 dubbo.properties,dubbo 将随机选择一个加载,并且打印错误日志。
2.如果 id 没有在 protocol 中配置,将使用 name 作为默认属性。
API配置
以API 配置的方式来配置你的 Dubbo 应用.
API 属性与配置项一对一,各属性含义,比如:ApplicationConfig.setName(“xxx”) 对应 <dubbo:application name=“xxx” />