本篇次要是基于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 |
iothreads | io线程池大小(固定大小),默认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 |
iothreads | io线程池大小(固定大小),默认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...