自訂擴展

演示如何使用 Dubbo 的擴展性功能。

Dubbo 的擴展性設計理念

  • 對第三方實現的平等性:在 Dubbo 中,所有內部和外部實現都被平等對待。用戶可以根據其業務需求替換 Dubbo 的原生實現。
  • 每個擴展點僅封裝一個可變因素,以實現最大程度的重複使用:每個擴展點的實現者通常只關心一件事。如果用戶需要擴展功能,則只需擴展相關的擴展點,從而顯著減少工作量。

基於 Java SPI 的擴展性設計

Dubbo 的擴展性來自於 JDK 標準 SPI(服務提供者介面)的增強版本。它改進了 JDK 標準 SPI 的以下問題

  • 標準 SPI 一次性實例化所有擴展點,如果某些擴展點未使用,則會浪費資源。
  • 如果擴展點載入失敗,則甚至無法取得擴展點的名稱。

Dubbo 的擴展性功能

  • 按需載入:Dubbo 不會一次性實例化所有實現,從而減少資源浪費。
  • IOC(控制反轉)功能:Dubbo 不僅會發現擴展服務實現類,還會自動將依賴項注入到擴展類中。
  • AOP(面向切面程式設計)功能:Dubbo 會自動發現擴展的包裝類,並建構它們以增強擴展功能。
  • 動態擴展選擇:Dubbo 在運行時根據參數動態選擇相應的擴展類。
  • 擴展實現排序:用戶可以指定擴展實現的執行順序。
  • 自適應擴展點:擴展可以在消費者端或提供者端生效。

擴展載入過程

Dubbo 的擴展載入過程如下

//imgs/v3/concepts/extension-load.png

主要步驟如下

  • 讀取並解析配置文件
  • 快取所有擴展實現
  • 根據使用者執行的擴充套件名稱,實例化相應的擴充套件實現。
  • 對擴充套件實例屬性執行 IOC 注入,並為 AOP 功能實例化擴充套件包裝類別。

任務項目

接下來,我們將通過以下任務項目介紹 Dubbo 的擴充套件性功能。

自訂過濾器

通過 SPI 機制動態載入自訂過濾器,以統一處理、驗證返回結果,並最大限度地減少開發人員中斷。

自訂路由

根據實際用例,在服務呼叫期間自訂路由策略,以有效提高服務吞吐量和延遲。

自訂協議

針對不同的異構系統使用自訂傳輸協議,消除協議之間的差異,促進系統整合。

自訂註冊中心

將來自不同註冊中心的服務納入 Dubbo 生態系統。自訂註冊中心是連接不同服務生態系統的關鍵。


Dubbo 的擴充套件性設計旨在為使用者提供高度靈活的擴充機制,提供動態擴充套件選擇、IOC 和 AOP 等功能。這使得 Dubbo 更容易適應各種場景,並與不同的技術堆疊整合。


上次修改時間:2023 年 11 月 1 日:翻譯擴充套件相關文件 (#2844) (e603103c03a)