dubbo 配置方式
dubbo 提供了4种服务配置的方式,它们分别是:XML 配置、属性配置、注解配置、API 配置(官方不推荐 API 配置的方式)。本文只介绍前三种,API 配置方式可点此前往官方文档查看API配置。
1. XML 配置
配置参考手册:
标签 | 描述 |
---|---|
<dubbo:service> |
服务提供者暴露服务配置,用于定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心。 |
<dubbo:protocol> |
服务提供者协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。 |
<dubbo:reference> |
服务消费者引用服务配置,用于创建一个远程服务代理,一个引用可以指向多个注册中心。 |
<dubbo:registry> |
注册中心配置,用于配置连接注册中心相关信息。 |
<dubbo:application> |
应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。 |
<dubbo:module> |
模块配置,用于配置当前模块信息,可选。 |
<dubbo:monitor> |
监控中心配置,用于配置连接监控中心相关信息,可选。 |
<dubbo:provider> |
服务提供者缺省值配置,当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采用此缺省值,可选。 |
<dubbo:consumer> |
服务消费者缺省值配置,当 ReferenceConfig 某属性没有配置时,采用此缺省值,可选。 |
<dubbo:method> |
方法配置,用于 ServiceConfig 和 ReferenceConfig 指定方法级的配置信息。 |
<dubbo:argument> |
方法参数配置。 |
注:标签属性只有group
,interface
,version
是服务的匹配条件,三者用于共同决定是否是同一个服务,其它属性配置项均为调优和治理参数。
1.1 dubbo:service
必填属性参考列表(更多可选参数可点此前往官方文档查看):
属性名称 | 类型 | 描述 |
---|---|---|
interface | class | 服务接口名 |
ref | object | 服务对象实现引用 |
|
|
1.2 dubbo:protocol
必填属性参考列表(更多可选参数可点此前往官方文档查看):
属性名称 | 类型 | 描述 |
---|---|---|
name | string | 协议名称 |
|
|
dubbo 支持的协议有:dubbo
、rmi
、hessian
、http
、webservice
、thrift
、redis
、memcached
。各个协议的介绍和使用场景可点此前往官方文档查看协议参考手册。
1.3 dubbo:reference
必填属性参考列表(更多可选参数可点此前往官方文档查看):
属性名称 | 类型 | 描述 |
---|---|---|
id | string | 服务引用的 Bean ID |
interface | class | 服务接口名 |
|
|
1.4 dubbo:registry
必填属性参考列表(更多可选参数可点此前往官方文档查看):
属性名称 | 类型 | 描述 |
---|---|---|
address | string | 注册中心服务器地址,如果地址没有端口缺省为 9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:port,不同集群的注册中心,请配置多个<dubbo:registry> 标签 |
|
|
dubbo 提供支持的服务注册中心有:multicast
、zookeeper
、redis
、simple
。官方推荐你使用zookeeper
注册中心,详细信息可点此前往官方文档查看注册中心参考手册。
1.5 dubbo:application
必填属性参考列表(更多可选参数可点此前往官方文档查看):
属性名称 | 类型 | 描述 |
---|---|---|
name | string | 当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样,此参数不是匹配条件,你当前项目叫什么名字就填什么,和提供者消费者角色无关 |
|
|
2. 属性配置
如果公共配置很简单,没有多注册中心,多协议等情况,或者想多个 Spring 容器想共享配置,可以使用 dubbo.properties 作为缺省配置。dubbo 将自动加载类路径下的 dubbo.properties,可以通过 JVM 启动参数:-Ddubbo.properties.file=xxx.properties
改变缺省配置位置。如果类路径下存在多个 dubbo.properties,比如多个 jar 包中有 dubbo.properties,dubbo 会任意加载,并打印 Error 日志,后续可能改为抛异常。
2.1 映射规则
- 将 XML 配置的标签名,加属性名,用点分隔,多个属性拆成多行:
- 比如 dubbo.application.name=foo 等价于:
<dubbo:application name="foo"/>
- 比如 dubbo.application.name=foo 等价于:
- 如果 XML 有多行同名标签配置,可用 id 号区分,如果没有 id 号将对所有同名标签生效:
- 比如 dubbo.protocol.rmi.port=1234 等价于:
<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"/>
- 比如 dubbo.protocol.rmi.port=1234 等价于:
|
|
2.2 覆盖策略
JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口。
XML 次之,如果在 XML 中有配置,则 dubbo.properties 中的相应配置项无效。
Properties 最后,相当于缺省值,只有 XML 没有配置时,dubbo.properties 的相应配置项才会生效,通常用于共享公共配置,比如应用名。
3. 注解配置
dubbo 2.2.1 以上的版本支持注解配置。
3.1 服务提供者
服务提供者使用com.alibaba.dubbo.config.annotation.@Service
注解暴露服务:
|
|
服务提供者使用<dubbo:annotation>
配置扫描的包路径,多个包用逗号分隔:
|
|
3.2 服务消费者
服务消费者使用com.alibaba.dubbo.config.annotation.@Reference
注解引用接口服务:
|
|
服务消费者<dubbo:annotation>
配置扫描的包路径,多个包用逗号分隔:
|
|
参考文档文献链接:dubbo用户指南