本篇主要是基于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
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
image.png
可以看到上面有个@Import(DubboConfigConfigurationRegistrar.class),进去看下
image.png
实现了接口ImportBeanDefinitionRegistrar(这是spring自定义bean的一种方式),从上图圈出来的地方可以看到对DubboConfigConfiguration.Multiple或者DubboConfigConfiguration.Single进行了注册(Multiple方式我也没用过),我们拿 Single 来举例,其实实现方式是一样的。
image.png
可以看到诸如dubbo.application等我们在配置文件里配置的前缀及其对应的类。进来EnableDubboConfigBinding,可以看到又是一个import。
image.png
直接看registerDubboConfigBindingBeanPostProcessor方法,我们发现这里又去注册一个DubboConfigBindingBeanPostProcessor类型的bean,再跟进去看
image.png
这里可以看到进行了数据绑定。绑定的类实际上是DefaultDubboConfigBinder
image.png
可以看到最终是用的spring的DataBinder进行了属性文件内容和对象字段的绑定。

xml文件方式

spring对于xml的解析其实是提供了扩展的,我们可以通过扩展来自定义自己的xml标签(如何自定义xml标签),dubbo就是这么做的。
image.png
从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定义
image.png
这样就很清楚了,applicationType定义了所有属性字段。
spring.schemas 文件定义了指定的标签文件路径
image.png
spring.handlers文件定义了集成spring的自定义处理类,dubbo的是DubboNamespaceHandler
image.png
看下图的逻辑基本就很清晰了,标签和类对应起来
image.png
最后数据绑定是在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...


爱炒股的程序猿
50 声望4 粉丝

每天进步一点点


引用和评论

1 篇内容引用
0 条评论