dubbo源码解析spring集成DubboNamespaceHandler配置参数①

说在前面

从今天开始系统的进行dubbo源码解析,本次先介绍下dubbo与spring进行集成相关的内容,更多源码解析请关注“天河聊架构”公众号。

源码解析

dubbo的namespace解析是这个类,com.alibaba.dubbo.config.spring.schema.DubboNamespaceHandler,前面spring源码解析的时候介绍过与spring整合的xml方式的,都是先解析NamespaceHandler,先看下dubboNamespaceHandler类的内容。

public class DubboNamespaceHandler extends NamespaceHandlerSupport {
    static {//        检查包冲突        Version.checkDuplicate(DubboNamespaceHandler.class);    }
    @Override    public void init() {//        xml配置解析=》        registerBeanDefinitionParser("application", new DubboBeanDefinitionParser(ApplicationConfig.class, true));        registerBeanDefinitionParser("module", new DubboBeanDefinitionParser(ModuleConfig.class, true));        registerBeanDefinitionParser("registry", new DubboBeanDefinitionParser(RegistryConfig.class, true));        registerBeanDefinitionParser("monitor", new DubboBeanDefinitionParser(MonitorConfig.class, true));        registerBeanDefinitionParser("provider", new DubboBeanDefinitionParser(ProviderConfig.class, true));        registerBeanDefinitionParser("consumer", new DubboBeanDefinitionParser(ConsumerConfig.class, true));        registerBeanDefinitionParser("protocol", new DubboBeanDefinitionParser(ProtocolConfig.class, true));        registerBeanDefinitionParser("service", new DubboBeanDefinitionParser(ServiceBean.class, true));        registerBeanDefinitionParser("reference", new DubboBeanDefinitionParser(ReferenceBean.class, false));//        annotation解析<dubbo:annotation package="" />xml配置=》        registerBeanDefinitionParser("annotation", new AnnotationBeanDefinitionParser());    }
}

静态块用来检查有没有权限定名一样的DubboNamespaceHandler.class文件,init方法会解析ApplicationConfig、ModuleConfig、RegistryConfig、MonitorConfig、providerConfig、ConsumerConfig、protocolConfig、ServiceBean、RefrenceBean 相关配置以及引用类型的配置注册到dubbo在spring beanFactory中的bean定义中。这些配置是由DubboBeanDefinitionParser这个bean定义解析器来完成解析。基于annotation的方式是用AnnotationBeanDefinitionParser这个bean定义解析器来解析,dubbo的provider、consumer也支持annotation的方式,详细可以查阅com.alibaba.dubbo.config.annotation.Service、com.alibaba.dubbo.config.annotation.Reference 其中的配置和<dubbo:service、<dubbo:reference xml标签中的配置是一样的,通过bean定义parser解析完都会解析成spring beanFactory的bean定义。

先整理看下applicationConfig中配置属性都有些什么。对应的是<dubbo:application xml标签

// application name    private String name;
    // module version    private String version;
    // application owner    private String owner;
    // application's organization (BU)    private String organization;
    // architecture layer    private String architecture;
    // environment, e.g. dev, test or production    private String environment;
    // Java compiler    private String compiler;
    // logger    private String logger;
    // registry centers    private List<RegistryConfig> registries;
    // monitor center    private MonitorConfig monitor;
    // is default or not    private Boolean isDefault;
    // directory for saving thread dump 线程堆栈保存文件夹    private String dumpDirectory;
    // whether to enable qos or not    private Boolean qosEnable;
    // the qos port to listen    private Integer qosPort;
    // should we accept foreign ip or not?    private Boolean qosAcceptForeignIp;
    // customized parameters    private Map<String, String> parameters;

这个配置主要是针对整个dubbo应用的全局配置,配置的优先级、加载顺序服务注册这一章解析完成后会单独介绍下,这里先不展开了。

 

name应用名,provider和consumer不能一致,用于注册中心计算应用间依赖关系

environment 环境,在开发、测试中有用

 

compiler java字节码编译器,用于动态类生成,可选 jdk、javassist,默认值javassist

 

logger 日志输出方式,可选:slf4j,jcl,log4j,log4j2,jdk,默认值slf4j

 

owner 应用负责人,用于服务治理

 

private List<RegistryConfig> registries; 这是dubbo注册中心相关的配置

dumpDirectory 属性,保存线程堆栈文件,对应xml标签参数dump.directory

 

注册中心配置,<dubbo:registry xml标签

public class RegistryConfig extends AbstractConfig {
    public static final String NO_AVAILABLE = "N/A";    private static final long serialVersionUID = 5508512956753757169L;    // register center address    private String address;
    // username to login register center    private String username;
    // password to login register center    private String password;
    // default port for register center    private Integer port;
    // protocol for register center    private String protocol;
    // client impl    private String transporter;
    private String server;
    private String client;
//    容错    private String cluster;
    private String group;
    private String version;
    // request timeout in milliseconds for register center 注册中心超时时间    private Integer timeout;
    // session timeout in milliseconds for register center 注册中心session超时时间    private Integer session;
    // file for saving register center dynamic list  注册中心动态列表保存文件    private String file;
    // wait time before stop 停止等待时间    private Integer wait;
    // whether to check if register center is available when boot up 检查注册中心是否可用    private Boolean check;
    // whether to allow dynamic service to register on the register center 服务是否允许动态注册到注册中心    private Boolean dynamic;
    // whether to export service on the register center 是否允许注册服务在注册中心    private Boolean register;
    // whether allow to subscribe service on the register center 是否允许订阅注册中心的服务    private Boolean subscribe;
    // customized parameters    private Map<String, String> parameters;
    // if it's default    private Boolean isDefault;

address 注册中心地址,对应xml标签 address属性

username属性对应xml标签 username属性

 

password属性对应xml标签password属性

port属性对应xml属性

 

zookeeper单机,address也可以这样用 zookeeper://127.0.0.1:2181

protocol属性,支持dubbo、multicast、redis、zookeeper等

transporter属性,网络传输方式,可选netty、mina、grizzly、http等

 

server 对应<dubbo:protocol server属性,默认dubbo协议是netty、http协议是servlet

 

client 对应<dubbo:protocol client属性,默认dubbo协议是netty

 

cluster 容错支持,默认值failover,失败自动重试,对应<dubbo:service 、<dubbo:reference、<dubbo:provider、<dubbo:consumer 标签cluster属性,容错机制一共有以下几种

 

available 使用可用的

failback 失败自动恢复,后台记录失败请求,定时重发

failfast 只发起一次调用,失败立即报警,一般用于非幂等操作

 

failover 失败自动切换,重试其他服务器,一般用于读操作,重试会带来更大的延迟

 

failsafe 失败安全,出现异常直接忽略,一般用于记录日志

 

forking 并行调用对个服务器,只要一个成功就返回,一般用于实时性比较高的读操作,需要浪费更多服务资源

 

group 默认值 dubbo,服务注册分组,跨组服务不会相互影响,且不能相互调用,适合于环境隔离

 

timeout 注册中心超时时间 

 

file 用来存储注册中心服务提供者的文件,服务重启会从这个文件加载注册中心

wait 服务关闭等待时间

 

check 检查注册的服务提供者是否可用,对应<dubbo:registry、<dubbo:refrence、<dubbo:consumer 标签check属性,默认值true

 

dynamic 服务是否动态注册。如果为false,服务将显示为disable,您需要手动启用它。您还需要在provider关闭时禁用它。默认值true

 

register 是否注册到注册中心。如果是false,只订阅,不注册。

subscribe 是否从注册中心订阅。如果是false,只注册,不订阅。

parameters 自定义参数

 

provider配置 对应<dubbo:provider标签

public class ProviderConfig extends AbstractServiceConfig {    private static final long serialVersionUID = 6913423882496634749L;
    // ======== protocol default values, it'll take effect when protocol's attributes are not set 协议默认值,不设置协议属性时生效 ========
    // service IP addresses (used when there are multiple network cards available)    private String host;
    // service port    private Integer port;
    // context path    private String contextpath;
    // thread pool 线程池类型    private String threadpool;
    // thread pool size (fixed size) 线程数    private Integer threads;
    // IO thread pool size (fixed size) io线程数    private Integer iothreads;
    // thread pool queue length 队列长度    private Integer queues;
    // max acceptable connections provider最大连接数    private Integer accepts;
    // protocol codec 编解码器    private String codec;
    // charset    private String charset;
    // payload max length 网络传送最大字节数    private Integer payload;
    // buffer size    private Integer buffer;
    // transporter    private String transporter;
    // how information gets exchanged 信息交换方式    private String exchanger;
    // thread dispatching mode 线程转发模式    private String dispatcher;
    // networker    private String networker;
    // server impl    private String server;
    // client impl    private String client;
    // supported telnet commands, separated with comma.    private String telnet;
    // command line prompt    private String prompt;
    // status check    private String status;
    // wait time when stop 停止等待时间    private Integer wait;

host 指定服务ip,当多网卡时使用

threadpool 线程池类型指定,默认fixed,可选 fixed、cached

threads 指定的线程池线程数,默认值200

iothreads io线程数,默认cpu线程数+1

queues 默认值0,dubbo建议任务直接处理不要加入队列

accepts 默认值9,服务提供者的最大连接数

codec 协议编解码支持,默认值dubbo

payload 请求和响应的长度限制,单位为字节,默认8m

buffer 网络IO的缓冲区大小,默认8192

 

transporter属性,网络传输方式,可选netty、mina、grizzly、http等,客户端和服务端可以单独设置

 

exchanger 协议转换器,默认值header,HeaderExchanger,对应<dubbo:protocol、<dubbo:provider 标签 exchanger属性

 

dispatcher 线程转发模型,all、connection、direct、execution、message,默认值all

all 所有消息都派发到线程池,包括请求、响应、连接事件、断开事件、心跳监测等

connection 在io线程上,将连接断开事件放入队列,有序逐个执行,其他消息派发到线程池

direct 所有消息都不派发到线程池,全部在io线程上直接执行

 

execution 只请求消息派发到线程池,不含响应,响应和其他连接断开事件,心跳检测等消息,直接在io线程上执行

 

message 只有请求响应消息派发到线程池,其他连接断开事件,心跳检测等消息,直接在io线程上执行

 

对应<dubbo:provider、<dubbo:protocol标签 dispatcher属性

 

networker 网络连接器,multicast 广播方式,file从文件中读取host,对应<dubbo:provider、<dubbo:protocol network属性

 

server server端协议,dubbo协议默认值是netty,http协议默认值是servlet

client client端协议,dubbo协议默认值netty,对应<dubbo:provider、<dubbo:ptotocol 标签 server、client属性

 

telnet 支持的telnet命令

clear、exit、help、status、log

 

status 状态检查,默认支持

memory 内存状态检查

load 加载状态检查

dubbo还是先了其他的状态检查,spi没加进来,需要自己扩展

RegistryStatusChecker 服务注册状态检查

ServerStatusChecker server状态检查

SpringStatusChecker spring容器状态检查

ThreadPoolStatusChecker 线程池状态检查

wait 服务停止等待时间

 

cosumer配置,对应<dubbo:consumer>、<dubbo:refrence>标签

public class ConsumerConfig extends AbstractReferenceConfig {
    private static final long serialVersionUID = 2827274711143680600L;
    // is default or not    private Boolean isDefault;
    // networking framework client uses: netty, mina, etc. 网络通讯中间件类型    private String client;
    // consumer thread pool type: cached, fixed, limit, eager 线程池类型    private String threadpool;
    // consumer threadpool core thread size 消费者线程池核心线程数    private Integer corethreads;
    // consumer threadpool thread size 消费者线程池线程数    private Integer threads;
    // consumer threadpool queue size 消费者线程池队列长度    private Integer queues;

client 客户端网络通讯组件,netty、mina等

 

threadpool 线程池类型

fixed java自带线程池

cached java自带线程池

limited 线程数只增大不会减少

 

eager java的线程池增加线程策略是核心线程数占满了往队列中放,队列也放满了没超过线程池的最大线程数才会创建线程,这个线程池增加线程的策略是currentPoolSize<submittedTaskCount<maxPoolSize满足这个条件时会增加线程,submittedTaskCount是dubbo扩展的一个计数器,在执行线程的时候增加计数,线程执行完减少计数。

 

corethreads 核心线程数,此参数对fixed线程池无效,fiexed类型的线程数核心线程数和最大线程数一致

 

threads 线程池的最大线程数

queues线程池队列大小

 

说在最后

本次解析仅代表个人观点,仅供参考。

转载于:https://my.oschina.net/u/3775437/blog/3098687

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值