說在前面 前期回顧java
sharding-jdbc源碼解析 更新完畢git
spring源碼解析 更新完畢github
spring-mvc源碼解析 更新完畢web
spring-boot源碼解析 更新完畢spring
rocketmq源碼解析 更新完畢json
dubbo源碼解析 更新中spring-mvc
rocketmq源碼解析系統架構篇 計劃中緩存
dubbo源碼解析系統架構篇 計劃中安全
sharding-sphere源碼解析 計劃中服務器
github https://github.com/tianheframe
rocketmq 更新完畢
dubbo 更新中
spring-cloud-tianhe 從0到1實現一套微服務組件 更新中
mq-tianhe 從0到1實現一個mq框架
rpc-tianhe 從0到1實現一個rpc框架 更多源碼解析歡迎關注天河聊架構微信公衆號。
源碼解析 接上次接續介紹spring集成配置參數解析。
protocolConfig <dubbo:protocol標籤
public class ProtocolConfig extends AbstractConfig { private static final long serialVersionUID = 6913423882496634749L; // protocol name 通信協議,默認dubbo,可選 hession、http、rmi、thrift、webservice等 private String name; // service IP address (when there are multiple network cards available) ip地址,多個虛擬網卡時 private String host; // service port private Integer port; // context path private String contextpath; // thread pool // 線程池類型 // fixed java自帶線程池 // cached java自帶線程池 // limited 線程數只增大不會減小 // eager java的線程池增長線程策略是核心線程數佔滿了往隊列中放,隊列也放滿了沒超過線程池的最大線程數纔會建立線程,這個線程池增長線程的策略是currentPoolSize<submittedTaskCount<maxPoolSize // 知足這個條件時會增長線程,submittedTaskCount是dubbo擴展的一個計數器,在執行線程的時候增長計數,線程執行完減小計數。 private String threadpool; // thread pool size (fixed size) 線程池的最大線程數 private Integer threads; // IO thread pool size (fixed size) io線程池線程數,主要指netty的work線程池線程數,默認Math.min(Runtime.getRuntime().availableProcessors() + 1, 32) private Integer iothreads; // thread pool's queue length 隊列長度,默認0 private Integer queues; // max acceptable connections 服務提供者最大可接收的線程數,0標識不限制,能夠用次參數來作服務降級 private Integer accepts; // protocol codec 編碼格式,默認dubbo private String codec; // serialization 序列化方式,默認是hession2,可選fastjson、jdk、kryo private String serialization; // charset 編碼格式,默認utf-8 private String charset; // payload max length 請求和響應的最大字節 默認8m private Integer payload; // buffer size nio通信緩衝區大小8192 private Integer buffer; // heartbeat interval 心跳監測頻次 60s private Integer heartbeat; // access log 處理日誌路徑 private String accesslog; // transfort 網絡傳輸方式,可選netty、mina、grizzly、http等 private String transporter; // how information is exchanged // 信息交換方式 header,默認HeaderExchanger // <dubbo:protocol exchanger=""/> // <dubbo:provider exchanger=""/> private String exchanger; // thread dispatch mode private String dispatcher; // networker private String networker; // sever 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; // whether to register private Boolean register; // parameters // 是否長鏈接 // TODO add this to provider config private Boolean keepAlive; // TODO add this to provider config private String optimizer; private String extension; // parameters private Map<String, String> parameters;
name 協議名,默認值dubbo、hession、http、rmi、thrift、webservice
host,ip地址,多個虛擬網卡時指定 本機ip
port 端口號,dubbo協議默認端口20881,rmi協議默認1099,http和hession協議默認80,若是指定-1會自動賦值爲一個未使用的端口
threadpool,線程池類型,默認值fixed,cached 緩存線程池,limited 線程數只會增大不會減小,eager java的線程池增長線程策略是核心線程數佔滿了往隊列中放,隊列也放滿了沒超過線程池的最大線程數纔會建立線程,這個線程池增長線程的策略是currentPoolSize<submittedTaskCount<maxPoolSize,知足這個條件時會增長線程
iothreads,io線程池線程數,主要指netty的work線程池線程數 Math.min(Runtime.getRuntime().availableProcessors() + 1, 32)
queues,隊列長度 默認值0
accepts,服務提供者最大可接收的線程數 默認值0,標識不限制,能夠用次參數來作服務降級 codec,編解碼協議,默認值dubbo,http、hession、injvm、rmi、thrift、webservice serialization,序列化方式,dubbo協議的默認序列化是hessian2, rmi協議是java, http協議是json、fastjson、kryo
payload,請求和響應的最大字節,默認8m buffer,nio通信緩衝區大小,8192 heartbeat,心跳監測頻次
exchanger <dubbo:protocol exchanger=""/> <dubbo:provider exchanger=""/>
信息交換方式 header,默認HeaderExchanger dispatcher 線程轉發模式,上一篇文章有詳細介紹 dubbo協議默認all
server,server實現,dubbo協議默認netty、http協議默認servlet client,client實現,dubbo協議默認netty register,是否註冊,默認值true keepAlive,是否長鏈接,默認值true
AbstractInterfaceConfig 服務配置, <dubbo:provider、<dubbo:service
public abstract class AbstractServiceConfig extends AbstractInterfaceConfig { private static final long serialVersionUID = 1L; // version protected String version; // group protected String group; // whether the service is deprecated 是否棄用 false protected Boolean deprecated; // delay service exporting 延遲加載服務的時間ms 0 protected Integer delay; // whether to export the service 是否加載服務 protected Boolean export; // weight 權重 protected Integer weight; // document center protected String document; // whether to register as a dynamic service or not on register center 服務是否能夠動態註冊到註冊中心 protected Boolean dynamic; // whether to use token 是否使用token驗證 protected String token; // access log 處理日誌文件 protected String accesslog; // 協議配置 protected List<ProtocolConfig> protocols; // 容許provider最大的併發數 // max allowed execute times private Integer executes; // 是否註冊 // whether to register private Boolean register; // warm up period private Integer warmup; // serialization 序列化方式 private String serialization;
version,版本號,可根據此字段作服務隔離 group,服務組,此字段可作服務隔離 deprecated 是否棄用,默認值false delay 服務導出延遲的時間,默認值0,導出 export 是否導出服務,默認值true weight 權重 dynamic 服務是否能夠動態註冊到註冊中心 默認值true token 是否啓用token驗證 默認值false accesslog 是否開啓處理日誌 ,默認值false executes 容許provider最大的併發數,此字段能夠用作限流 默認值0,不作限制 register 是否註冊到註冊中心 默認註冊到全部的註冊中心 warmup 服務預熱 10 * 60 * 1000 serialization 序列化方式 dubbo協議默認hession2 fastjson、kryo
AbstractInterfaceConfig 接口配置,<dubbo:provider、<dubbo:service、<dubbo:consumer、<dubbo:reference標籤
public abstract class AbstractInterfaceConfig extends AbstractMethodConfig { private static final long serialVersionUID = -1559314110797223229L; // local impl class name for the service interface 接口的本地實現類名 protected String local; // local stub class name for the service interface protected String stub; // service monitor protected MonitorConfig monitor; // proxy type 代理類型 protected String proxy; // cluster type 容錯類型 protected String cluster; // filter protected String filter; // listener protected String listener; // owner protected String owner; // connection limits, 0 means shared connection, otherwise it defines the connections delegated to the // current service 鏈接方式,0表示共享鏈接,服務最大的鏈接數 // consumer鏈接數 protected Integer connections; // layer protected String layer; // application info protected ApplicationConfig application; // module info protected ModuleConfig module; // registry centers protected List<RegistryConfig> registries; // connection events 鏈接事件 protected String onconnect; // disconnection events 斷開鏈接事件 protected String ondisconnect; // callback limits 回調次數 private Integer callbacks; // the scope for referring/exporting a service, if it's local, it means searching in current JVM only.引用/導出服務的範圍(若是是本地的)意味着只在當前JVM中搜索。 private String scope;
local 服務代理的本地實現類名或者是否使用本地實現 默認值false stub 是否使用默認的代理類名 默認值false proxy 代理類型 默認值javassist
cluster 容錯類型 默認值failover available 使用可用的 failback 失敗自動恢復,後臺記錄失敗請求,定時重發 failfast 只發起一次調用,失敗當即報警,通常用於非冪等操做 failover 失敗自動切換,重試其餘服務器,通常用於讀操做,重試會帶來更大的延遲 failsafe 失敗安全,出現異常直接忽略,通常用於記錄日誌 forking 並行調用對個服務器,只要一個成功就返回,通常用於實時性比較高的讀操做,須要浪費更多服務資源 filter filter 默認值default listener listener 默認值default
connections consumer鏈接數,0標識共享鏈接,每一個提供者的最大鏈接。對於短鏈接(如rmi、http和hessian),它是鏈接限制,可是對於長鏈接(如dubbo),它是鏈接計數。 默認值100
onconnect 鏈接事件方法名 ondisconnect 斷開鏈接方法名 callbacks 異步回調次數限制 默認值1 scope 引用/導出服務的範圍 local表明只從jvm內導出或引用服務
AbstractMethodConfig 方法配置
public abstract class AbstractMethodConfig extends AbstractConfig { private static final long serialVersionUID = 1L; // timeout for remote invocation in milliseconds 執行超時時間愛你 protected Integer timeout; // retry times 重試次數 protected Integer retries; // max concurrent invocations consumer最大併發數 protected Integer actives; // load balance 負載均衡策略 protected String loadbalance; // whether to async 是否異步 protected Boolean async; // whether to ack async-sent 異步是否須要ack protected Boolean sent; // the name of mock class which gets called when a service fails to execute 服務調用失敗後調用mock類 protected String mock; // merger 結果集合並方法 protected String merger; // cache 緩存 protected String cache; // validation protected String validation;
timeout 超時時間 默認值1000ms retries 重試次數 默認值2 actives consumer 最大併發數 0表明不限制
loadbalance 負載均衡策略 默認值random random 隨機 roundrobin 輪詢 leastactive 最少活躍數 consistenthash 哈希一致性
async 是否異步 默認值false sent 異步是否須要ack 默認值true
mock 默認值false true表示使用默認的mock類名,即帶有mock後綴的接口名。當RPC失敗時調用它,例如超時或IO異常。mock類必須攜帶一個無參數構造函數。mock和本地代理的區別在於,老是在RPC以前調用本地代理,而只有在RPC以後出現異常時才調用mock。
merger 結果集合並方法 cache 緩存 lru、threadlocal、jcache validation 是否啓用JSR303標準註釋驗證
說在最後
本次解析僅表明我的觀點,僅供參考。