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

說在前面 前期回顧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標準註釋驗證

說在最後

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

相關文章
相關標籤/搜索