歡迎光臨
每天分享高質量文章

精盡 Dubbo 原理與原始碼專欄( 已經完成 69+ 篇,預計總共 75+ 篇 )

  • 只更新在筆者的知識星球,歡迎加入一起討論 Dubbo 原始碼與實現

  • ↓↓↓ 長按下方二維碼加入 ↓↓↓

    • ↑↑↑ 長按上方二維碼加入
    • 目前已經有 1500+ 位球友加入…

    • 進度:已經完成 69+ 篇,預計總共 75+ 篇,完成度 92% 。

    • ? 另外,星球還有精盡 Netty 原始碼 61 篇。 

  • 對應 Dubbo 版本號:2.6.X

1.1 目錄

  • 除錯環境搭建

    • 《精盡 Dubbo 原始碼分析 —— 除錯環境搭建》

  • 專案結構一覽

    • 《精盡 Dubbo 原始碼分析 —— 專案結構一覽》

  • 配置 Configuration

    • 《精盡 Dubbo 原始碼解析 —— API 配置(一)之應用》

    • 《精盡 Dubbo 原始碼解析 —— API 配置(二)之服務提供者》

    • 《精盡 Dubbo 原始碼解析 —— API 配置(三)之服務消費者》

    • 《精盡 Dubbo 原始碼分析 —— 屬性配置》

    • 《精近 Dubbo 原始碼解析 —— XML 配置》

  • 核心流程一覽

    • 《精近 Dubbo 原始碼解析 —— 核心流程一覽》

  • 拓展機制 SPI

    • 《精盡 Dubbo 原始碼分析 —— 拓展機制 SPI》

  • 執行緒池

    • 《精盡 Dubbo 原始碼分析 —— 執行緒池》

  • 服務暴露 Export

    • 《精盡 Dubbo 原始碼分析 —— 服務暴露(一)之本地暴露(Injvm)》

    • 《精盡 Dubbo 原始碼分析 —— 服務暴露(二)之遠程暴露(Dubbo)》

  • 服務取用 Refer

    • 《精盡 Dubbo 原始碼分析 —— 服務取用(一)之本地取用(Injvm)》

    • 《精盡 Dubbo 原始碼分析 —— 服務取用(二)之遠程取用(Dubbo)》

  • 註冊中心 Registry

    • 《精盡 Dubbo 原始碼分析 —— Zookeeper 客戶端》

    • 《精盡 Dubbo 原始碼分析 —— 註冊中心(一)之抽象 API》

    • 《精盡 Dubbo 原始碼分析 —— 註冊中心(二)之 Zookeeper》

    • 《精盡 Dubbo 原始碼分析 —— 註冊中心(三)之 Redis》

    • 《精盡 Dubbo 原始碼分析 —— 註冊中心(四)之 Simple 》

    • 《精盡 Dubbo 原始碼分析 —— 註冊中心(五)之 Multicast 》

  • 動態編譯 Compile

    • 《精盡 Dubbo 原始碼分析 —— 動態編譯(一)之 Javassist》

    • 《精盡 Dubbo 原始碼分析 —— 動態編譯(二)之 JDK》

  • 動態代理 Proxy

    • 《精盡 Dubbo 原始碼分析 —— 動態代理(一)之 Javassist》

    • 《精盡 Dubbo 原始碼分析 —— 動態代理(二)之 JDK》

    • 《精盡 Dubbo 原始碼分析 —— 動態代理(三)之本地存根 Stub》

  • 服務呼叫 Invoke

    • 《精盡 Dubbo 原始碼分析 —— 服務呼叫(一)之本地呼叫(Injvm)》

    • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【1】通信實現》

    • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【2】同步呼叫》

    • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【3】異步呼叫》

    • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【4】引數回呼》

    • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(三)之遠程呼叫(HTTP)》

    • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(四)之遠程呼叫(Hessian)》

    • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(五)之遠程呼叫(Webservice)》

    • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(六)之遠程呼叫(REST)》

    • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(七)之遠程呼叫(RMI)》

    • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(八)之遠程呼叫(Redis)》

    • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(九)之遠程呼叫(Memcached)》

    • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(十)之遠程呼叫(Thrift)》

  • 呼叫特性

    • 《精盡 Dubbo 原始碼解析 —— 呼叫特性(一)之回音測試》

    • 《精盡 Dubbo 原始碼解析 —— 呼叫特性(二)之泛化取用》

    • 《精盡 Dubbo 原始碼解析 —— 呼叫特性(三)之泛化實現》

  • 過濾器 Filter

    • 《精盡 Dubbo 原始碼解析 —— 過濾器(一)之 ClassLoaderFilter》

    • 《精盡 Dubbo 原始碼解析 —— 過濾器(二)之 ContextFilter》

    • 《精盡 Dubbo 原始碼解析 —— 過濾器(三)之 AccessLogFilter》

    • 《精盡 Dubbo 原始碼分析 —— 過濾器(四)之 ActiveLimitFilter && ExecuteLimitFilter》

    • 《精盡 Dubbo 原始碼分析 —— 過濾器(五)之 TimeoutFilter》

    • 《精盡 Dubbo 原始碼分析 —— 過濾器(六)之 DeprecatedFilter》

    • 《精盡 Dubbo 原始碼分析 —— 過濾器(七)之 ExceptionFilter》

    • 《精盡 Dubbo 原始碼分析 —— 過濾器(八)之 TokenFilter》

    • 《精盡 Dubbo 原始碼分析 —— 過濾器(九)之 TpsLimitFilter》

    • 《精盡 Dubbo 原始碼分析 —— 過濾器(十)之 CacheFilter》

    • 《精盡 Dubbo 原始碼分析 —— 過濾器(十一)之 ValidationFilter》

  • NIO 服務器

    • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(一)之抽象 API》

    • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(二)之 Transport 層》

    • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(三)之 Telnet 層》

    • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(四)之 Exchange 層》

    • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(五)之 Buffer 層》

    • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(六)之 Netty4 實現》

    • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(七)之 Netty3 實現》

    • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(八)之 Mina1 實現》

    • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(九)之 Grizzly 實現》

  • P2P 服務器

    • 《精盡 Dubbo 原始碼分析 —— P2P 服務器》

  • HTTP 服務器

    • 《精盡 Dubbo 原始碼分析 —— HTTP 服務器》

  • 序列化 Serialization

    • 《精盡 Dubbo 原始碼分析 —— 序列化(一)之 總體實現》

    • 《精盡 Dubbo 原始碼分析 —— 序列化(二)之 Dubbo 實現》

    • 《精盡 Dubbo 原始碼分析 —— 序列化(三)之 Kryo 實現》

  • 服務容器 Container

    • 《精盡 Dubbo 原始碼解析 —— 服務容器》

  • 集群容錯 Cluster

    • 《精盡 Dubbo 原始碼解析 —— 集群容錯(一)之抽象 API》

    • 《精盡 Dubbo 原始碼解析 —— 集群容錯(二)之 Cluster 實現》

    • 《精盡 Dubbo 原始碼解析 —— 集群容錯(三)之 Directory 實現》

    • 《精盡 Dubbo 原始碼解析 —— 集群容錯(四)之 Loadbalance 實現》

    • 《精盡 Dubbo 原始碼解析 —— 集群容錯(五)之 Merger 實現》

    • 《精盡 Dubbo 原始碼解析 —— 集群容錯(六)之 Configurator 實現》

    • 《精盡 Dubbo 原始碼解析 —— 集群容錯(七)之 Router 實現》

    • 《精盡 Dubbo 原始碼解析 —— 集群容錯(八)之 Mock 實現》

  • 優雅停機

    • 《精盡 Dubbo 原始碼解析 —— 優雅停機》

  • 日誌適配

    • 《精盡 Dubbo 原始碼解析 —— 日誌適配》

  • 狀態檢查

    • 《精盡 Dubbo 原始碼解析 —— 狀態檢查》

  • 監控中心 Monitor

    • TODO 等待新版本

  • 管理中心 Admin

    • TODO 等待新版本

  • 運維命令 QOS

    • TODO 比較簡單,未來寫一下

  • 鏈路追蹤 Tracing

    • 《SkyWalking 原始碼分析 —— Agent 插件(二)之 Dubbo》

ps:

  • 小圓點代表已完成;

  • 小方塊代表未來計劃完成

  • 鐘華賢代表不考慮寫

1.2 Dubbo 用戶指南

本小節,我們將 《精盡 Dubbo 原始碼解析》 和 《Dubbo 用戶指南》 做一次映射,方便大家直接找到感興趣的功能的具體原始碼實現。當然,如果有整理不到位的地方,歡迎大家給我留言斧正。

【<2> 快速啟動】

Dubbo 採用全 Spring 配置方式,透明化接入應用,對應用沒有任何 API 侵入,只需用 Spring 加載 Dubbo 的配置即可,Dubbo 基於 Spring 的 Schema 擴展進行加載。

如果不想使用 Spring 配置,可以通過 API 的方式 進行呼叫。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 除錯環境搭建》

【<5.1> XML 配置】

有關 XML 的詳細配置項,請參見:配置參考手冊。如果不想使用 Spring 配置,而希望通過 API 的方式進行呼叫,請參見:API配置。想知道如何使用配置,請參見:快速啟動。

對應原始碼解析文章:

  • 《精近 Dubbo 原始碼解析 —— XML 配置》

【<5.2> 屬性配置】

如果公共配置很簡單,沒有多註冊中心,多協議等情況,或者想多個 Spring 容器想共享配置,可以使用 dubbo.properties 作為預設配置。

Dubbo 將自動加載 classpath 根目錄下的 dubbo.properties,可以通過JVM啟動引數 -Ddubbo.properties.file=xxx.properties 改變預設配置位置。1

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 屬性配置》

【<5.3> API 配置】

API 屬性與配置項一對一,各屬性含義,請參見:配置參考手冊,比如:ApplicationConfig.setName("xxx")對應  1

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— API 配置(一)之應用》

  • 《精盡 Dubbo 原始碼解析 —— API 配置(二)之服務提供者》

  • 《精盡 Dubbo 原始碼解析 —— API 配置(三)之服務消費者》

【<5.4> 註解配置】

需要 2.5.7 及以上版本支持

對應原始碼解析文章:

    《精盡 Dubbo 原始碼解析 —— 註解配置》

【<6.1> 啟動時檢查】

Dubbo 預設會在啟動時檢查依賴的服務是否可用,不可用時會丟擲異常,阻止 Spring 初始化完成,以便上線時,能及早發現問題,預設 check="true"

可以通過 check="false" 關閉檢查,比如,測試時,有些服務不關心,或者出現了迴圈依賴,必須有一方先啟動。

另外,如果你的 Spring 容器是懶加載的,或者通過 API 編程延遲取用服務,請關閉 check,否則服務臨時不可用時,會丟擲異常,拿到 null 取用,如果 check="false",總是會傳回取用,當服務恢復時,能自動連上。

  • 註意,服務提供者註冊失敗,是沒有啟動檢查功能的。這一點,筆者一直理解錯了。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(一)之抽象 API》

【<6.2> 集群容錯】

在集群呼叫失敗時,Dubbo 提供了多種容錯方案,預設為 failover 重試。

cluster

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(一)之抽象 API》

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(二)之 Cluster 實現》

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(三)之 Directory 實現》

【<6.3> 負載均衡】

在集群負載均衡時,Dubbo 提供了多種均衡策略,預設為 random 隨機呼叫。

可以自行擴展負載均衡策略,參見:負載均衡擴展

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(四)之 Loadbalance 實現》

【<6.4> 執行緒模型】

如果事件處理的邏輯能迅速完成,並且不會發起新的 IO 請求,比如只是在記憶體中記個標識,則直接在 IO 執行緒上處理更快,因為減少了執行緒池調度。

但如果事件處理邏輯較慢,或者需要發起新的 IO 請求,比如需要查詢資料庫,則必須派發到執行緒池,否則 IO 執行緒阻塞,將導致不能接收其它請求。

如果用 IO 執行緒處理事件,又在事件處理過程中發起新的 IO 請求,比如在連接事件中發起登錄請求,會報“可能引發死鎖”異常,但不會真死鎖。

dubbo-protocol

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 執行緒池》

【<6.5> 直連提供者】

在開發及測試環境下,經常需要繞過註冊中心,只測試指定服務提供者,這時候可能需要點對點直連,點對點直聯方式,將以服務接口為單位,忽略註冊中心的提供者串列,A 接口配置點對點,不影響 B 接口從註冊中心獲取串列。

/user-guide/images/dubbo-directly.jpg

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 服務取用(二)之遠程取用(Dubbo)》

【<6.6> 只訂閱】

為方便開發測試,經常會在線下共用一個所有服務可用的註冊中心,這時,如果一個正在開發中的服務提供者註冊,可能會影響消費者不能正常運行。

可以讓服務提供者開發方,只訂閱服務(開發的服務可能依賴其它服務),而不註冊正在開發的服務,通過直連測試正在開發的服務。

/user-guide/images/subscribe-only.jpg

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 服務取用(一)之本地暴露(Injvm)》

【<6.7> 只註冊】

如果有兩個鏡像環境,兩個註冊中心,有一個服務只在其中一個註冊中心有部署,另一個註冊中心還沒來得及部署,而兩個註冊中心的其它應用都需要依賴此服務。這個時候,可以讓服務提供者方只註冊服務到另一註冊中心,而不從另一註冊中心訂閱服務。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 服務取用(一)之本地暴露(Injvm)》

【<6.8> 靜態服務】

有時候希望人工管理服務提供者的上線和下線,此時需將註冊中心標識為非動態管理樣式。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(二)之 Zookeeper》

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(三)之 Redis》

【<6.9> 多協議】

Dubbo 允許配置多協議,在不同服務上支持不同協議或者同一服務上同時支持多種協議。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 服務暴露(一)之本地暴露(Injvm)》

  • 《精盡 Dubbo 原始碼分析 —— 服務暴露(二)之遠程暴露(Dubbo)》

【<6.10> 多註冊中心】

Dubbo 支持同一服務向多註冊中心同時註冊,或者不同服務分別註冊到不同的註冊中心上去,甚至可以同時取用註冊在不同註冊中心上的同名服務。另外,註冊中心是支持自定義擴展的。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 服務暴露(一)之本地暴露(Injvm)》

  • 《精盡 Dubbo 原始碼分析 —— 服務暴露(二)之遠程暴露(Dubbo)》

  • 《精盡 Dubbo 原始碼分析 —— 服務取用(一)之本地取用(Injvm)》

  • 《精盡 Dubbo 原始碼分析 —— 服務取用(二)之遠程取用(Dubbo)》

【<6.11> 服務分組】

當一個接口有多種實現時,可以用 group 區分。

  • 《精盡 Dubbo 原始碼分析 —— 服務暴露(二)之遠程暴露(Dubbo)》

  • 《精盡 Dubbo 原始碼分析 —— 服務取用(二)之遠程取用(Dubbo)》

【<6.12> 多版本】

當一個接口實現,出現不兼容升級時,可以用版本號過渡,版本號不同的服務相互間不取用。

可以按照以下的步驟進行版本遷移:

  1. 在低壓力時間段,先升級一半提供者為新版本

  2. 再將所有消費者升級為新版本

  3. 然後將剩下的一半提供者升級為新版本

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 服務暴露(二)之遠程暴露(Dubbo)》

  • 《精盡 Dubbo 原始碼分析 —— 服務取用(二)之遠程取用(Dubbo)》

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【2】同步呼叫》

【<6.13> 分組聚合】

按組合併傳回結果 1,比如選單服務,接口一樣,但有多種實現,用group區分,現在消費方需從每種group中呼叫一次傳回結果,合併結果傳回,這樣就可以實現聚合選單項。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(五)之 Merger 實現》

【<6.14> 引數驗證】

引數驗證功能 1 是基於 JSR303 實現的,用戶只需標識 JSR303 標準的驗證 annotation,並通過宣告 filter 來實現驗證 2。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(十一)之 ValidationFilter》

【<6.15> 結果快取】

結果快取 1,用於加速熱門資料的訪問速度,Dubbo 提供宣告式快取,以減少用戶加快取的工作量 2。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(十)之 CacheFilter》

【<6.16> 泛化取用】

泛化接口呼叫方式主要用於客戶端沒有 API 接口及模型類元的情況,引數及傳回值中的所有 POJO 均用 Map 表示,通常用於框架集成,比如:實現一個通用的服務測試框架,可通過 GenericService 呼叫所有服務實現。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 呼叫特性(二)之泛化取用》

【<6.17> 泛化實現】

泛接口實現方式主要用於服務器端沒有API接口及模型類元的情況,引數及傳回值中的所有POJO均用Map表示,通常用於框架集成,比如:實現一個通用的遠程服務Mock框架,可通過實現GenericService接口處理所有服務請求。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 呼叫特性(三)之泛化實現》

【<6.18> 回聲測試】

回聲測試用於檢測服務是否可用,回聲測試按照正常請求流程執行,能夠測試整個呼叫是否通暢,可用於監控。

所有服務自動實現 EchoService 接口,只需將任意服務取用強制轉型為 EchoService,即可使用。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 呼叫特性(一)之回音測試》

【<6.19> 背景關係信息】

背景關係中存放的是當前呼叫過程中所需的環境信息。所有配置信息都將轉換為 URL 的引數,參見 schema 配置參考手冊 中的對應URL引數一列。

RpcContext 是一個 ThreadLocal 的臨時狀態記錄器,當接收到 RPC 請求,或發起 RPC 請求時,RpcContext 的狀態都會變化。比如:A 調 B,B 再調 C,則 B 機器上,在 B 調 C 之前,RpcContext 記錄的是 A 調 B 的信息,在 B 調 C 之後,RpcContext 記錄的是 B 調 C 的信息。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 過濾器(二)之 ContextFilter》

【<6.20> 隱式引數】

可以通過 RpcContext 上的 setAttachment 和 getAttachment 在服務消費方和提供方之間進行引數的隱式傳遞。 1

/user-guide/images/context.png

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 過濾器(二)之 ContextFilter》

【<6.21> 異步呼叫】

基於 NIO 的非阻塞實現並行呼叫,客戶端不需要啟動多執行緒即可完成並行呼叫多個遠程服務,相對多執行緒開銷較小。 1

/user-guide/images/future.jpg

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【3】異步呼叫》

【<6.22> 本地呼叫】

本地呼叫使用了 injvm 協議,是一個偽協議,它不開啟端口,不發起遠程呼叫,只在 JVM 內直接關聯,但執行 Dubbo 的 Filter 鏈。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 服務呼叫(一)之本地呼叫(Injvm)》

【<6.23> 引數回呼】

引數回呼方式與呼叫本地 callback 或 listener 相同,只需要在 Spring 的配置檔案中宣告哪個引數是 callback 型別即可。Dubbo 將基於長連接生成反向代理,這樣就可以從服務器端呼叫客戶端邏輯 1。可以參考 dubbo 專案中的示例代碼。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【4】引數回呼》

【<6.24> 事件通知】

在呼叫之前、呼叫之後、出現異常時,會觸發 oninvokeonreturnonthrow 三個事件,可以配置當事件發生時,通知哪個類的哪個方法 1。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【3】異步呼叫》

【<6.25> 本地存根】

遠程服務後,客戶端通常只剩下接口,而實現全在服務器端,但提供方有些時候想在客戶端也執行部分邏輯,比如:做 ThreadLocal 快取,提前驗證引數,呼叫失敗後偽造容錯資料等等,此時就需要在 API 中帶上 Stub,客戶端生成 Proxy 實體,會把 Proxy 通過建構式傳給 Stub 1,然後把 Stub 暴露給用戶,Stub 可以決定要不要去調 Proxy。

/user-guide/images/stub.jpg

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 動態代理(三)之本地存根 Stub》

【<6.26> 本地偽裝】

本地偽裝 1 通常用於服務降級,比如某驗權服務,當服務提供方全部掛掉後,客戶端不丟擲異常,而是通過 Mock 資料傳回授權失敗。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(八)之 Mock 實現》

【<6.27> 延遲暴露】

如果你的服務需要預熱時間,比如初始化快取,等待相關資源就位等,可以使用 delay 進行延遲暴露。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— API 配置(二)之服務提供者》

【<6.28> 併發控制】

限制 com.foo.BarService 的每個方法,服務器端併發執行(或占用執行緒池執行緒數)不能超過 10 個

限制 com.foo.BarService 的 sayHello 方法,服務器端併發執行(或占用執行緒池執行緒數)不能超過 10 個

限制 com.foo.BarService 的每個方法,每客戶端併發執行(或占用連接的請求數)不能超過 10 個

限制 com.foo.BarService 的 sayHello 方法,每客戶端併發執行(或占用連接的請求數)不能超過 10 個

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(四)之 ActiveLimitFilter && ExecuteLimitFilter》

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(四)之 Loadbalance 實現》

【<6.29> 連接控制】

限制服務器端接受的連接不能超過 10 個 1:

限制客戶端服務使用連接不能超過 10 個 2:

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(四)之 ActiveLimitFilter && ExecuteLimitFilter》

【<6.30> 延遲連接】

延遲連接用於減少長連接數。當有呼叫發起時,再創建長連接。1

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【1】通信實現》

【<6.31> 粘滯連接】

粘滯連接用於有狀態服務,盡可能讓客戶端總是向同一提供者發起呼叫,除非該提供者掛了,再連另一臺。

粘滯連接將自動開啟延遲連接,以減少長連接數。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(一)之抽象 API》

【<6.32> 令牌驗證】

通過令牌驗證在註冊中心控制權限,以決定要不要下發令牌給消費者,可以防止消費者繞過註冊中心訪問提供者,另外通過註冊中心可靈活改變授權方式,而不需修改或升級提供者

/user-guide/images/dubbo-token.jpg

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(八)之 TokenFilter》

【<6.33> 路由規則】

路由規則 1 決定一次 dubbo 服務呼叫的標的服務器,分為條件路由規則和腳本路由規則,並且支持可擴展 2。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(七)之 Router 實現》

【<6.34> 配置規則】

向註冊中心寫入動態配置改寫規則 1。該功能通常由監控中心或治理中心的頁面完成。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(六)之 Configurator 實現》

【<6.35> 服務降級】

可以通過服務降級功能 1 臨時屏蔽某個出錯的非關鍵服務,並定義降級後的傳回策略。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(八)之 Mock 實現》

【<6.36> 優雅停機】

Dubbo 是通過 JDK 的 ShutdownHook 來完成優雅停機的,所以如果用戶使用 kill -9 PID 等強制關閉指令,是不會執行優雅停機的,只有通過 kill PID 時,才會執行。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 優雅停機》

【<6.37> 主機系結】

預設主機 IP 查找順序:

  • 通過 LocalHost.getLocalHost() 獲取本機地址。

  • 如果是 127.* 等 loopback 地址,則掃描各網卡,獲取網卡 IP。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— API 配置(二)之服務提供者》

【<6.38> 日誌適配】

自 2.2.1 開始,dubbo 開始內置 log4j、slf4j、jcl、jdk 這些日誌框架的適配 1,也可以通過以下方式顯示配置日誌輸出策略:

  1. 命令列

  2. 在 dubbo.properties 中指定

  3. 在 dubbo.xml 中配置

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 日誌適配》

【<6.39> 訪問日誌】

如果你想記錄每一次請求信息,可開啟訪問日誌,類似於apache的訪問日誌。註意:此日誌量比較大,請註意磁盤容量。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 過濾器(三)之 AccessLogFilter》

【<6.40> 服務容器】

服務容器是一個 standalone 的啟動程式,因為後臺服務不需要 Tomcat 或 JBoss 等 Web 容器的功能,如果硬要用 Web 容器去加載服務提供方,增加複雜性,也浪費資源。

服務容器只是一個簡單的 Main 方法,並加載一個簡單的 Spring 容器,用於暴露服務。

服務容器的加載內容可以擴展,內置了 spring, jetty, log4j 等加載,可通過容器擴展點進行擴展。配置配在 java 命令的 -D 引數或者 dubbo.properties 中。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務容器》

【<6.41> ReferenceConfig 快取】

ReferenceConfig 實體很重,封裝了與註冊中心的連接以及與提供者的連接,需要快取。否則重覆生成 ReferenceConfig 可能造成性能問題並且會有記憶體和連接泄漏。在 API 方式編程時,容易忽略此問題。

因此,自 2.4.0 版本開始, dubbo 提供了簡單的工具類 ReferenceConfigCache用於快取 ReferenceConfig 實體。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— API 配置(三)之服務消費者》

【<6.42> 分佈式事務】

分佈式事務基於 JTA/XA 規範實現 1。

兩階段提交:

/user-guide/images/jta-xa.jpg

目前該功能暫未實現,如下是推薦閱讀的內容:

  • 《RocketMQ 原始碼分析 —— 事務訊息》

  • 《Sharding-JDBC 原始碼分析 —— 分佈式事務(一)之最大努力型》

  • 《MyCAT 原始碼分析 —— XA分佈式事務》

  • 《TCC-Transaction 原始碼解析 —— 精品合集》

  • 《Happylifeplat-TCC 原始碼解析 —— 精品合集》

  • 《Myth 原始碼解析 —— 精品合集》

【<6.43> 執行緒棧自動dump】

當業務執行緒池滿時,我們需要知道執行緒都在等待哪些資源、條件,以找到系統的瓶頸點或異常點。dubbo通過Jstack自動匯出執行緒堆棧來保留現場,方便排查問題

預設策略:

  • 匯出路徑,user.home標識的用戶主目錄

  • 匯出間隔,最短間隔允許每隔10分鐘匯出一次

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 執行緒池》

【<6.44> Netty4】

dubbo 2.5.6版本新增了對netty4通信模塊的支持

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(六)之 Netty4 實現》

【<8> schema 配置參考手冊】

這裡以 XML Config 1 為準,列舉所有配置項 2。其它配置方式,請參見相應轉換關係:屬性配置,註解配置,API 配置。

對應原始碼解析文章:

  • 《精近 Dubbo 原始碼解析 —— XML 配置》

【<9.1> dubbo://】

Dubbo 預設協議採用單一長連接和 NIO 異步通訊,適合於小資料量大併發的服務呼叫,以及服務消費者機器數遠大於服務提供者機器數的情況。

反之,Dubbo 預設協議不適合傳送大資料量的服務,比如傳檔案,傳視頻等,除非請求量很低。

dubbo-protocol.jpg

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【1】通信實現》

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【2】同步呼叫》

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【3】異步呼叫》

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(二)之遠程呼叫(Dubbo)【4】引數回呼》

【<9.2> rmi://】

RMI 協議採用 JDK 標準的 java.rmi.* 實現,採用阻塞式短連接和 JDK 標準序列化方式。

註意:如果正在使用 RMI 提供服務給外部訪問 1,同時應用里依賴了老的 common-collections 包 2 的情況下,存在反序列化安全風險 3。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(七)之遠程呼叫(RMI)》

【<9.3> hessian://】

Hessian 1 協議用於集成 Hessian 的服務,Hessian 底層採用 Http 通訊,採用 Servlet 暴露服務,Dubbo 預設內嵌 Jetty 作為服務器實現。

Dubbo 的 Hessian 協議可以和原生 Hessian 服務互操作,即:

  • 提供者用 Dubbo 的 Hessian 協議暴露服務,消費者直接用標準 Hessian 接口呼叫

  • 或者提供方用標準 Hessian 暴露服務,消費方用 Dubbo 的 Hessian 協議呼叫。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(四)之遠程呼叫(Hessian)》

【<9.4> http://】

基於 HTTP 表單的遠程呼叫協議,採用 Spring 的 HttpInvoker 實現 1

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(三)之遠程呼叫(HTTP)》

【<9.5> webservice://】

基於 WebService 的遠程呼叫協議,基於 Apache CXF 1 的 frontend-simple 和 transports-http 實現 2。

可以和原生 WebService 服務互操作,即:

  • 提供者用 Dubbo 的 WebService 協議暴露服務,消費者直接用標準 WebService 接口呼叫,

  • 或者提供方用標準 WebService 暴露服務,消費方用 Dubbo 的 WebService 協議呼叫。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(五)之遠程呼叫(Webservice)》

【<9.6> thrift://】

當前 dubbo 支持 1的 thrift 協議是對 thrift 原生協議 2 的擴展,在原生協議的基礎上添加了一些額外的頭信息,比如 service name,magic number 等。

使用 dubbo thrift 協議同樣需要使用 thrift 的 idl compiler 編譯生成相應的 java 代碼,後續版本中會在這方面做一些增強。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(十)之遠程呼叫(Thrift)》

【<9.7> memcached://】

基於 memcached 1 實現的 RPC 協議 2。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(九)之遠程呼叫(Memcached)》

【<9.8> redis://】

基於 Redis 1 實現的 RPC 協議 2。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(八)之遠程呼叫(Redis)》

【<9.9> rest://】

對應文件為

  • 《在Dubbo中開發REST風格的遠程呼叫(RESTful Remoting)》 。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務呼叫(六)之遠程呼叫(REST)》

【<10.1> Multicast 註冊中心】

Multicast 註冊中心不需要啟動任何中心節點,只要廣播地址一樣,就可以互相發現。

/user-guide/images/multicast.jpg
  1. 提供方啟動時廣播自己的地址

  2. 消費方啟動時廣播訂閱請求

  3. 提供方收到訂閱請求時,單播自己的地址給訂閱者,如果設置了 unicast=false,則廣播給訂閱者

  4. 消費方收到提供方地址時,連接該地址進行 RPC 呼叫。

組播受網絡結構限制,只適合小規模應用或開發階段使用。組播地址段: 224.0.0.0 – 239.255.255.255

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(五)之 Multicast 》

【<10.2> zookeeper 註冊中心】

Zookeeper 是 Apacahe Hadoop 的子專案,是一個樹型的目錄服務,支持變更推送,適合作為 Dubbo 服務的註冊中心,工業強度較高,可用於生產環境,並推薦使用 1。

/user-guide/images/zookeeper.jpg

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— Zookeeper 客戶端》

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(一)之抽象 API》

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(二)之 Zookeeper》

【<10.3> Redis 註冊中心】

基於 Redis 1 實現的註冊中心 2。

/user-guide/images/dubbo-redis-registry.jpg

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(三)之 Redis》

【<10.4> Simple 註冊中心】

Simple 註冊中心本身就是一個普通的 Dubbo 服務,可以減少第三方依賴,使整體通訊方式一致。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(四)之 Simple 》

【<11> Telnet 命令參考手冊】

從 2.0.5 版本開始,dubbo 開始支持通過 telnet 命令來鏡像服務治理。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(三)之 Telnet 層》

【<12> 在線運維命令-QOS】

dubbo 2.5.8 新版本重構了 telnet 模塊,提供了新的 telnet 命令支持。

對應原始碼解析文章:

TODO

dubbo-ops

1.3 Dubbo 開髮指南

本小節,我們將 《精盡 Dubbo 原始碼解析》 和 《Dubbo 開髮指南》 做一次映射,方便大家直接找到感興趣的功能的具體原始碼實現。當然,如果有整理不到位的地方,歡迎大家給我留言斧正。

【<1> 原始碼構建】

代碼簽出 
分支 
構建 
構建原始碼 jar 包 
IDE 支持

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 除錯環境搭建》

【<2> 框架設計】

/dev-guide/images/dubbo-framework.jpg

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 專案結構一覽》

  • 《精近 Dubbo 原始碼解析 —— 核心流程一覽》

【<3> 擴展點加載】

Dubbo 的擴展點加載從 JDK 標準的 SPI (Service Provider Interface) 擴展點發現機制加強而來。

Dubbo 改進了 JDK 標準的 SPI 的以下問題:

  • JDK 標準的 SPI 會一次性實體化擴展點所有實現,如果有擴展實現初始化很耗時,但如果沒用上也加載,會很浪費資源。

  • 如果擴展點加載失敗,連擴展點的名稱都拿不到了。比如:JDK 標準的 ScriptEngine,通過 getName() 獲取腳本型別的名稱,但如果 RubyScriptEngine 因為所依賴的 jruby.jar 不存在,導致 RubyScriptEngine 類加載失敗,這個失敗原因被吃掉了,和 ruby 對應不起來,當用戶執行 ruby 腳本時,會報不支持 ruby,而不是真正失敗的原因。

  • 增加了對擴展點 IoC 和 AOP 的支持,一個擴展點可以直接 setter 註入其它擴展點。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 拓展機制 SPI》

【<5.1> 協議擴展】

RPC 協議擴展,封裝遠程呼叫細節。

契約:

  • 當用戶呼叫 refer() 所傳回的 Invoker 物件的 invoke() 方法時,協議需相應執行同 URL 遠端 export() 傳入的 Invoker 物件的 invoke() 方法。

  • 其中,refer() 傳回的 Invoker 由協議實現,協議通常需要在此 Invoker 中發送遠程請求,export() 傳入的 Invoker 由框架實現並傳入,協議不需要關心。

註意:

  • 協議不關心業務接口的透明代理,以 Invoker 為中心,由外層將 Invoker 轉換為業務接口。

  • 協議不一定要是 TCP 網絡通訊,比如通過共享檔案,IPC 行程間通訊等。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 服務暴露(一)之本地暴露(Injvm)》

  • 《精盡 Dubbo 原始碼分析 —— 服務暴露(二)之遠程暴露(Dubbo)》

  • 《精盡 Dubbo 原始碼分析 —— 服務取用(一)之本地取用(Injvm)》

  • 《精盡 Dubbo 原始碼分析 —— 服務取用(二)之遠程取用(Dubbo)》

【<5.2> 呼叫攔截擴展】

服務提供方和服務消費方呼叫過程攔截,Dubbo 本身的大多功能均基於此擴展點實現,每次遠程方法執行,該攔截都會被執行,請註意對性能的影響。

約定:

  • 用戶自定義 filter 預設在內置 filter 之後。

  • 特殊值 default,表示預設擴展點插入的位置。比如:filter="xxx,default,yyy",表示 xxx 在預設 filter 之前,yyy 在預設 filter 之後。

  • 特殊符號 -,表示剔除。比如:filter="-foo1",剔除添加預設擴展點 foo1。比如:filter="-default",剔除添加所有預設擴展點。

  • provider 和 service 同時配置的 filter 時,累加所有 filter,而不是改寫。比如: 和 ,則 xxx,yyy,aaa,bbb 均會生效。如果要改寫,需配置:

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 過濾器(一)之 ClassLoaderFilter》

  • 《精盡 Dubbo 原始碼解析 —— 過濾器(二)之 ContextFilter》

  • 《精盡 Dubbo 原始碼解析 —— 過濾器(三)之 AccessLogFilter》

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(四)之 ActiveLimitFilter && ExecuteLimitFilter》

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(五)之 TimeoutFilter》

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(六)之 DeprecatedFilter》

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(七)之 ExceptionFilter》

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(八)之 TokenFilter》

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(九)之 TpsLimitFilter》

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(十)之 CacheFilter》

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(十一)之 ValidationFilter》

【<5.3> 取用監聽擴展】

當有服務取用時,觸發該事件。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 服務取用(一)之本地取用(Injvm)》

【<5.4> 暴露監聽擴展】

當有服務暴露時,觸發該事件。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 服務暴露(一)之本地暴露(Injvm)》

【<5.5> 集群擴展】

當有多個服務提供方時,將多個服務提供方組織成一個集群,並偽裝成一個提供方。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(一)之抽象 API》

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(二)之 Cluster 實現》

【<5.6> 路由擴展】

從多個服務提者方中選擇一個進行呼叫。

  • 官方文件寫的有問題,從多個服務提者方中篩選出所有匹配的結果集。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(七)之 Router 實現》

【<5.7> 負載均衡擴展】

從多個服務提者方中選擇一個進行呼叫

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(四)之 Loadbalance 實現》

【<5.8> 合併結果擴展】

合併傳回結果,用於分組聚合。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 集群容錯(五)之 Merger 實現》

【<5.9> 註冊中心擴展】

負責服務的註冊與發現。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— Zookeeper 客戶端》

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(一)之抽象 API》

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(二)之 Zookeeper》

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(三)之 Redis》

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(四)之 Simple 》

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(五)之 Multicast 》

【<5.10> 監控中心擴展】

負責服務呼叫次和呼叫時間的監控。

對應原始碼解析文章:

TODO

【<5.11> 擴展點加載擴展】

擴展點本身的加載容器,可從不同容器加載擴展點。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 拓展機制 SPI》

【<5.12> 動態代理擴展】

將 Invoker 接口轉換成業務接口。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 動態代理(一)之 Javassist》

  • 《精盡 Dubbo 原始碼分析 —— 動態代理(二)之 JDK》

【<5.13> 編譯器擴展】

Java 代碼編譯器,用於動態生成位元組碼,加速呼叫。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 動態編譯(一)之 Javassist》

  • 《精盡 Dubbo 原始碼分析 —— 動態編譯(二)之 JDK》

【<5.14> 訊息派發擴展】

通道信息派發器,用於指定執行緒池模型。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(一)之抽象 API》

【<5.15> 執行緒池擴展】

服務提供方執行緒程實現策略,當服務器收到一個請求時,需要在執行緒池中創建一個執行緒去執行服務提供方業務邏輯。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 執行緒池》

【<5.16> 序列化擴展】

將物件轉成位元組流,用於網絡傳輸,以及將位元組流轉為物件,用於在收到位元組流資料後還原成物件。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 序列化(一)之 總體實現》

  • 《精盡 Dubbo 原始碼分析 —— 序列化(二)之 Dubbo 實現》

  • 《精盡 Dubbo 原始碼分析 —— 序列化(三)之 Kryo 實現》

【<5.17> 網絡傳輸擴展】

遠程通訊的服務器及客戶端傳輸實現。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(一)之抽象 API》

  • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(二)之 Transport 層》

【<5.18> 信息交換擴展】

基於傳輸層之上,實現 Request-Response 信息交換語意。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(四)之 Exchange 層》

【<5.19> 組網擴展】

對等網絡節點組網器。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 註冊中心(五)之 Multicast 》

【<5.20> Telnet 命令擴展】

所有服務器均支持 telnet 訪問,用於人工干預。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— NIO 服務器(三)之 Telnet 層》

【<5.21> 狀態檢查擴展】

檢查服務依賴各種資源的狀態,此狀態檢查可同時用於 telnet 的 status 命令和 hosting 的 status 頁面。

對應原始碼解析文章:

TODO

【<5.22> 容器擴展】

服務容器擴展,用於自定義加載內容。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 服務容器》

【<5.23> 頁面擴展】

對等網絡節點組網器。

  • 官方文件寫的有問題,應該是請求處理器,有點類似 Servlet 。

對應原始碼解析文章:

TODO

【<5.24> 快取擴展】

用請求引數作為 key,快取傳回結果。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(十)之 CacheFilter》

【<5.25> 驗證擴展】

引數驗證擴展點。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼分析 —— 過濾器(十一)之 ValidationFilter》

【<5.26> 日誌適配擴展】

日誌輸出適配擴展點。

對應原始碼解析文章:

  • 《精盡 Dubbo 原始碼解析 —— 日誌適配》

1.4 Dubbo 運維指南

《Dubbo 運維指南》 ,暫時無映射的需要。

赞(0)

分享創造快樂