概述
Dubbo的配置项非常多,但所有配置项分为三大类,服务发现、服务治理、性能调优。服务发现类的配置项,表示该配置项用于服务的注册与发现,目的是让消费方找到提供方;服务治理类的配置项,表示该配置项用于治理服务间的关系,或为开发测试提供便利条件;对于性能调优类的配置项,则表示该配置项用于调优性能,不同的选项对性能会产生影响。所有配置最终都将转换为URL表示,并由服务提供方生成,经注册中心传递给消费方,各属性对应URL的参数。不同的配置项,有不同的使用场景,掌握配置项的含义和使用场景,是用好Dubbo框架的基本功。
Dubbo目前可供配置的配置项或者xml标签一共有13种,涉及可配置的属性210个,有些配置项和属性存在优先级和缺省关系,也并不是每个配置项都是必须的。下面是这13种配置项及其常用属性的配置说明。
dubbo:service
服务提供者暴露服务配置,用来配置一个服务,在服务提供者端进行配置。对应的配置类是org.apache.dubbo.config.ServiceConfig。比如下面的配置,定义和曝露了一个用户服务userService。
- interface
服务接口名,一般使用接口的完整类名,必填项
- ref
服务接口实现类bean的id引用,必填项
<bean id="userService" class="com.fandou.coffee.provider.user.UserServiceImpl"/>
<dubbo:service interface="com.fandou.coffee.api.user.UserService" ref="userService"/>
dubbo:reference
服务消费者引用服务配置,在服务消费者端配置,用来定义引用一个远程的服务。对应的配置类是org.apache.dubbo.config.ReferenceConfig。
- id
服务引用BeanId,必填项
- interface
服务接口名,一般使用接口的完整类名,与dubbo:service中的interface保持一致,必填项
- check
检查引用的服务是否存在,属于服务治理类的属性,默认为true,如果注册中心不存在应用的服务,将报错抛出异常。可选项。
<dubbo:reference id="userService" check="false" interface="com.fandou.coffee.api.user.UserService"/>
dubbo:protocol
服务提供者协议配置,服务提供者端或服务消费者端均可配置。对应的配置类是org.apache.dubbo.config.ProtocolConfig。同时,如果需要支持多协议,可以声明多个dubbo:protocol标签,并在dubbo:service中通过protocol属性指定使用的协议,多个协议id用逗号分隔。
- id
协议BeanId,可以在dubbo:service的protocol引用此id,如果id不填,缺省和name属性值一样,重复则在name后加序号。可选项。
- name
协议名称,如果不配置dubbo:protocol,将使用dubbo:provider中的设置,默认dubbo。必填。
- port
协议通信端口号,可选项,缺省值20880.
<dubbo:protocol name="dubbo" port="20880"/>
dubbo:registry
注册中心配置,Dubbo目前主要支持zookeeper以及redis等。对应的配置类是org.apache.dubbo.config.RegistryConfig。同时如果有多个不同的注册中心,可以声明多个dubbo:registry标签,并在dubbo:service或dubbo:reference的registry属性指定使用的注册中心。
- id
注册中心引用BeanId,可选项,可以在dubbo:service的registry或dubbo:reference的registry中引用此ID。
- address
注册中心服务器地址,格式为protocol://ip:port,必填项。如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:protocol://ip:port,protocol://ip:port,不同集群的注册中心,请配置多个dubbo:registry标签。
- protocol
注册中心地址协议,支持dubbo, multicast, zookeeper, redis, consul, sofa, etcd, nacos等协议,可选项,缺省值为dubbo。
- port
注册中心缺省端口,当address没有带端口时使用此端口作为缺省值,可选项,缺省值为9090。
- username
登录注册中心用户名,如果注册中心不需要验证可不填。可选项。
- password
登录注册中心密码,如果注册中心不需要验证可不填。可选项。
- transport
网络传输方式,可选mina,netty。可选项,缺省值为netty。
下面的配置,使用address属性,指定了使用的协议、注册中心服务器地址以及端口号
<dubbo:registry address="zookeeper://192.168.8.156:2181"/>
dubbo:application
应用信息配置,以及qos等。对应的配置类是org.apache.dubbo.config.ApplicationConfig。
- name
当前应用名称,用于注册中心计算应用间依赖关系,注意:消费者和提供者应用名不要一样,此参数不是匹配条件,当前项目叫什么名字就填什么,和提供者消费者角色无关。必填项。
- logger
日志输出方式,可选:slf4j,jcl,log4j,log4j2,jdk,缺省值为slf4j。
下面的配置定义了一个用户服务提供者应用,并使用slf4j作为日志输出。
<dubbo:application name="user-service-provider.xml" logger="slf4j"/>
下面配置了一个服务消费者应用,同时还配置了qos属性
<!-- 服务消费方应用名称,方便用于依赖跟踪 -->
<dubbo:application name="user-service-consumer" logger="slf4j">
<dubbo:parameter key="qos.enable" value="true" />
<dubbo:parameter key="qos.accept.foreign.ip" value="false" />
<!-- 配置QOS端口,由于服务提供方端已经使用了默认的22222,这里需要改用以下,否则在同一个机器同时将出现端口占用问题 -->
<dubbo:parameter key="qos.port" value="33333" />
</dubbo:application>
dubbo:monitor
监控中心配置,可选配置项。对应的配置类是org.apache.dubbo.config.MonitorConfig。此配配置项只有两个属性
- protocol
监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心。可选项,缺省值为dubbo。
- address
直连监控中心服务器地址,比如address="10.20.130.230:12080"。可选项,缺省值为N/A。
dubbo:module
模块信息配置,可选配置项。对应的配置类是org.apache.dubbo.config.ModuleConfig。
- name
当前模块名称,用于注册中心计算模块间依赖关系。
下面的配置定义了一个user模块:
当前模块名称,用于注册中心计算模块间依赖关系。
dubbo:provider
服务提供者缺省值配置,可选配置项,常用于配置缺省值。对应的配置类是org.apache.dubbo.config.ProviderConfig。同时该标签为dubbo:service和dubbo:protocol标签的缺省值设置。
dubbo:consumer
服务消费者缺省值配置,可选配置项,常用于配置缺省值。配置类是org.apache.dubbo.config.ConsumerConfig 。同时该标签为dubbo:reference标签的缺省值设置。
dubbo:method
方法级配置,可选配置项。对应的配置类是org.apache.dubbo.config.MethodConfig。同时该标签为dubbo:service或dubbo:reference的子标签,用于控制到方法级。
dubbo:argument
方法参数配置,可选配置项。对应的配置类: org.apache.dubbo.config.ArgumentConfig。该标签为 dubbo:method 的子标签,用于方法参数的特征描述,比如:
<dubbo:method name="findXxx" timeout="3000" retries="2">
<dubbo:argument index="0" callback="true" />
</dubbo:method>
dubbo:parameter
选项参数配置,可选配置项。对应的配置类是java.util.Map。同时该标签为dubbo:protocol或dubbo:service或dubbo:provider或dubbo:reference或dubbo:consumer的子标签,用于配置自定义参数,该配置项将作为扩展点设置自定义参数使用。
dubbo:config-center
配置中心,可选配置项。对应的配置类是org.apache.dubbo.config.ConfigCenterConfig。
属性配置优先级
Dubbo 配置文件中各个标签属性配置的优先级总原则是:
- 方法级优先,接口级(服务级)次之,全局配置再次之。
- 如果级别一样,则消费方优先,提供方次之。
另外,还有两个标签需要说明一下:
- <dubbo:provider/>设置在提供者端,用于设置提供者端的默认配置,即提供者端的默认
配置。 - <dubbo:consumer/>设置在消费者端,用于设置消费者端的默认配置,即消费者端的全
局设置。
总结
不同的配置项,有不同的使用场景,掌握配置项的含义和使用场景,是用好Dubbo框架的基本功。