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解析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 其中的配置和

先整理看下applicationConfig中配置属性都有些什么。对应的是

// 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 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 parameters;

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

 

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

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

 

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

 

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

 

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

 

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

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

 

注册中心配置,

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 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 对应

 

client 对应

 

cluster 容错支持,默认值failover,失败自动重试,对应

 

available 使用可用的

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

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

 

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

 

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

 

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

 

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

 

timeout 注册中心超时时间 

 

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

wait 服务关闭等待时间

 

check 检查注册的服务提供者是否可用,对应

 

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

 

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

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

parameters 自定义参数

 

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,对应

 

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

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

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

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

 

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

 

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

 

对应

 

networker 网络连接器,multicast 广播方式,file从文件中读取host,对应

 

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

client client端协议,dubbo协议默认值netty,对应

 

telnet 支持的telnet命令

clear、exit、help、status、log

 

status 状态检查,默认支持

memory 内存状态检查

load 加载状态检查

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

RegistryStatusChecker 服务注册状态检查

ServerStatusChecker server状态检查

SpringStatusChecker spring容器状态检查

ThreadPoolStatusChecker 线程池状态检查

wait 服务停止等待时间

 

cosumer配置,对应标签

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

 

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

 

threads 线程池的最大线程数

queues线程池队列大小

 

说在最后

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

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

你可能感兴趣的:(dubbo源码解析spring集成DubboNamespaceHandler配置参数①)