本篇次要是基于2.7.1对罕用的dubbo配置进行整顿以及介绍dubbo配置是如何集成spring的。

前言

对于dubbo配置,我这里就讲目前我的项目里用的多的两种形式,property文件配置以及xml配置,其实配置的项都一样。property文件形式的配置对立前缀dubbo.,xml形式的配置的配置对立前缀dubbo:,下文配置项不写前缀了。

罕用配置

application

利用级别的配置,用于配置利用信息

配置项作用
name利用的名称,用于标识哪个dubbo利用
version利用的版本
owner利用的维护者
logger指定日志框架,可选:slf4j, jcl, log4j, log4j2, jdk,默认log4j
compiler指定字节码解决类,可选:jdk, javassist,默认Javassist
environment指定所属环境,可选:develop, test, product

module

用于配置以后模块信息,可选,用途不大,只是为了配置补充

配置项作用
name模块名称
version模块的版本
owner模块的维护者
isDefault是否默认配置,如果配置多个module则须要指定default

registry

注册核心配置

配置项作用
address注册核心服务器地址,如果地址没有端口缺省为9090,同一集群内的多个地址用逗号分隔,如:ip:port,ip:port,不同集群的注册核心,请配置多个<<dubbo:registry>>标签
username登录注册核心用户名
password登录注册核心明码
port注册核心缺省端口,当address没有带端口时应用此端口做为缺省值,默认9090
protocol注册核心地址协定,反对dubbo, multicast, zookeeper, redis, consul(2.7.1), sofa(2.7.2), etcd(2.7.2), nacos(2.7.2)等协定
transporter网络传输方式,可选mina,netty,默认netty
check注册核心不存在时,是否报错,默认true
timeout注册核心申请超时工夫(毫秒),默认5000
register是否向此注册核心注册服务,如果设为false,将只订阅,不注册,默认true
subscribe是否向此注册核心订阅服务,如果设为false,将只注册,不订阅,默认true
group服务注册分组,跨组的服务不会相互影响,也无奈互相调用,实用于环境隔离。

protocol

服务提供者协定配置

配置项作用
name协定名称,默认dubbo
host主动查找本机IP,多网卡抉择或指定VIP及域名时应用,为空则主动查找本机IP
port服务端口,dubbo协定缺省端口为20880,rmi协定缺省端口为1099,http和hessian协定缺省端口为80;如果没有配置port,则主动采纳默认端口,如果配置为-1,则会调配一个没有被占用的端口
threadpool线程池类型,可选:fixed/cached,默认fixed
threads服务线程池大小(固定大小),默认200
iothreadsio线程池大小(固定大小),默认cpu个数+1
accepts服务提供方最大可承受连接数,默认0
payload申请及响应数据包大小限度,单位:字节,默认8388608(=8M)
codec协定编码方式,默认dubbo
serialization协定编码方式,协定序列化形式,当协定反对多种序列化形式时应用,比方:dubbo协定的dubbo,hessian2,java,compactedjava,以及http协定的json等,dubbo协定缺省为hessian2,rmi协定缺省为java,http协定缺省为json
accesslog设为true,将向logger中输入拜访日志,也可填写拜访日志文件门路,间接把拜访日志输入到指定文件
transporter协定的服务端和客户端实现类型,比方:dubbo协定的mina,netty等,能够分拆为server和client配置,dubbo协定缺省为netty
codec协定编码方式,默认dubbo
dispatcher协定的音讯派发形式,用于指定线程模型,比方:dubbo协定的all, direct, message, execution, connection等,默认all

monitor

监控核心配置

配置项作用
protocol监控核心协定,如果为protocol=“registry”,示意从注册核心发现监控核心地址,否则直连监控核心。默认dubbo
address直连监控核心服务器地址,address=“10.20.130.230:12080”
username用户名
password明码

provider

服务提供者缺省值配置

配置项作用
host服务主机名,多网卡抉择或指定VIP及域名时应用
port服务提供者端口
threadpool线程池类型,可选:fixed/cached/limit(2.5.3以上)/eager(2.6.x以上),默认fixed
threads服务线程池大小(固定大小),默认200
iothreadsio线程池大小(固定大小),默认cpu个数+1
timeout近程服务调用超时工夫(毫秒),1000
retries近程服务调用重试次数,不包含第一次调用,不须要重试请设为0,默认2
loadbalance负载平衡策略,可选值:random,roundrobin,leastactive,别离示意:随机,轮询,起码沉闷调用,默认 random
stub设为true,示意应用缺省代理类名,即:接口名 + Local后缀。自定义扩大
mock设为true,示意应用缺省Mock类名,即:接口名 + Mock后缀。降级用
token令牌验证,为空示意不开启,如果为true,示意随机生成动静令牌
registry向指定注册核心注册,在多个注册核心时应用,值为 <<dubbo:registry>> 的id属性,多个注册核心ID用逗号分隔,如果不想将该服务注册到任何registry,可将值设为N/A
weight服务权重
executes服务提供者每服务每办法最大可并行执行申请数
proxy生成动静代理形式,可选:jdk/javassist,默认javassist
cluster集群形式,可选:failover/failfast/failsafe/failback/forking,默认failover
deprecated服务是否过期,如果设为true,生产方援用时将打印服务过期正告error日志
async是否缺省异步执行,不牢靠异步,只是疏忽返回值,不阻塞执行线程,默认false

consumer

服务消费者缺省值配置

配置项作用
timeout近程服务调用超时工夫(毫秒),默认1000
retries近程服务调用重试次数,不包含第一次调用,不须要重试请设为0,仅在cluster为failback/failover时无效,默认2
loadbalance负载平衡策略,可选值:random,roundrobin,leastactive,别离示意:随机,轮询,起码沉闷调用
async是否缺省异步执行,默认false
generic是否缺省泛化接口,默认false
check启动时查看提供者是否存在,true报错,false疏忽,默认true
cluster集群形式,可选:failover/failfast/failsafe/failback/forking,默认failover
filter服务生产方近程调用过程拦截器名称,多个名称用逗号分隔
registry向指定注册核心注册,在多个注册核心时应用,值为<dubbo:registry>的id属性,多个注册核心ID用逗号分隔,如果不想将该服务注册到任何registry,可将值设为N/A
init是否在afterPropertiesSet()时饥饿初始化援用,否则等到有人注入或援用该实例时再初始化,默认false
cache以调用参数为key,缓存返回后果,可选:lru, threadlocal, jcache等
validation是否启用JSR303规范注解验证,如果启用,将对办法参数上的注解进行校验
async是否缺省异步执行,默认false
corethreads线程池的外围线程数
threads线程池的最大线程数
injvm是否只裸露在本地jvm
lazy是否在发动近程调用的时候初始化连贯
mock设为true,示意应用缺省Mock类名,即:接口名 + Mock后缀。降级用
stub设为true,示意应用缺省代理类名,即:接口名 + Local后缀。自定义扩大

config-center

配置核心配置,平时根本没用

配置项作用
protocol应用哪个配置核心:apollo、zookeeper、nacos等。默认zookeeper
address配置核心地址,以zookeeper为例 1. 指定 protocol,则 address 能够简化为127.0.0.1:2181;2. 不指定 protocol,则 address 取值为 zookeeper://127.0.0.1:2181
username配置核心用户名
password配置核心明码
timeout获取配置的超时工夫,默认3000
check当配置核心连贯失败时,是否终止利用启动,默认true

metadata-report

元数据中心配置,平时根本没用

配置项作用
address元数据中心地址
username元数据中心用户名
password元数据中心明码
timeout超时工夫

dubbo是如何集成到spring的

集成到spring的模块是dubbo-config-spring。

注解形式

咱们在应用注解形式应用dubbo的时候通常会用到注解@EnableDubboConfig

能够看到下面有个@Import(DubboConfigConfigurationRegistrar.class),进去看下

实现了接口ImportBeanDefinitionRegistrar(这是spring自定义bean的一种形式),从上图圈进去的中央能够看到对DubboConfigConfiguration.Multiple或者DubboConfigConfiguration.Single进行了注册(Multiple形式我也没用过),咱们拿 Single 来举例,其实实现形式是一样的。

能够看到诸如dubbo.application等咱们在配置文件里配置的前缀及其对应的类。进来EnableDubboConfigBinding,能够看到又是一个import。

间接看registerDubboConfigBindingBeanPostProcessor办法,咱们发现这里又去注册一个DubboConfigBindingBeanPostProcessor类型的bean,再跟进去看

这里能够看到进行了数据绑定。绑定的类实际上是DefaultDubboConfigBinder

能够看到最终是用的spring的DataBinder进行了属性文件内容和对象字段的绑定。

xml文件形式

spring对于xml的解析其实是提供了扩大的,咱们能够通过扩大来自定义本人的xml标签(如何自定义xml标签),dubbo就是这么做的。

从resources文件夹下咱们能够看到这些文件,其中dubbo.xsd就是所有自定义标签的定义。举个例子:application定义

    <xsd:element name="application" type="applicationType">        <xsd:annotation>            <xsd:documentation><![CDATA[ The application config ]]></xsd:documentation>            <xsd:appinfo>                <tool:annotation>                    <tool:exports type="org.apache.dubbo.config.ApplicationConfig"/>                </tool:annotation>            </xsd:appinfo>        </xsd:annotation>    </xsd:element>

能够看到对于的类型是applicationType,再看applicationType定义

这样就很分明了,applicationType定义了所有属性字段。
spring.schemas 文件定义了指定的标签文件门路

spring.handlers文件定义了集成spring的自定义解决类,dubbo的是DubboNamespaceHandler

看下图的逻辑根本就很清晰了,标签和类对应起来

最初数据绑定是在org.apache.dubbo.config.spring.schema.DubboBeanDefinitionParser#parse(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext, java.lang.Class<?>, boolean)

总结

这篇实用性比拟强,平时在配置的时候能够参考下。理解原理之后本人也能够实现一个集成spring的工具包。
配置也能够参考官网:https://dubbo.apache.org/zh/d...