概述
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框架的基本功。