dubbo源碼解析spring集成DubboNamespaceHandler配置參數①

說在前面java

從今天開始系統的進行dubbo源碼解析,本次先介紹下dubbo與spring進行集成相關的內容,更多源碼解析請關注「天河聊架構」公衆號。redis

源碼解析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);}@Overridepublic 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 nameprivate String name;// module versionprivate String version;// application ownerprivate String owner;// application's organization (BU)private String organization;// architecture layerprivate String architecture;// environment, e.g. dev, test or productionprivate String environment;// Java compilerprivate String compiler;// loggerprivate String logger;// registry centersprivate List<RegistryConfig> registries;// monitor centerprivate MonitorConfig monitor;// is default or notprivate Boolean isDefault;// directory for saving thread dump 線程堆棧保存文件夾private String dumpDirectory;// whether to enable qos or notprivate Boolean qosEnable;// the qos port to listenprivate Integer qosPort;// should we accept foreign ip or not?private Boolean qosAcceptForeignIp;// customized parametersprivate Map<String, String> parameters;

這個配置主要是針對整個dubbo應用的全局配置,配置的優先級、加載順序服務註冊這一章解析完成後會單獨介紹下,這裏先不展開了。session

 

name應用名,provider和consumer不能一致,用於註冊中心計算應用間依賴關係架構

environment 環境,在開發、測試中有用app

 

compiler java字節碼編譯器,用於動態類生成,可選 jdk、javassist,默認值javassistide

 

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 addressprivate String address;// username to login register centerprivate String username;// password to login register centerprivate String password;// default port for register centerprivate Integer port;// protocol for register centerprivate String protocol;// client implprivate 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 parametersprivate Map<String, String> parameters;// if it's defaultprivate 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 portprivate Integer port;// context pathprivate 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;// charsetprivate String charset;// payload max length 網絡傳送最大字節數private Integer payload;// buffer sizeprivate Integer buffer;// transporterprivate String transporter;// how information gets exchanged 信息交換方式private String exchanger;// thread dispatching mode 線程轉發模式private String dispatcher;// networkerprivate String networker;// server implprivate String server;// client implprivate String client;// supported telnet commands, separated with comma.private String telnet;// command line promptprivate String prompt;// status checkprivate 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 notprivate 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線程池隊列大小

 

說在最後

本次解析僅表明我的觀點,僅供參考。

相關文章
相關標籤/搜索