天天看點

Dubbo Remoting子產品詳解(上)Dubbo 整體架構設計圖dubbo-remoting-api 子產品傳輸層核心接口Channel

dubbo-remoting 子產品提供了多種用戶端和服務端通信功能。

最底層部分即為 Remoting 層

Dubbo Remoting子產品詳解(上)Dubbo 整體架構設計圖dubbo-remoting-api 子產品傳輸層核心接口Channel
包括 Exchange、Transport和Serialize 三層。本文主要描述 Exchange 和 Transport 兩層。

Dubbo 整體架構設計圖

  • Dubbo直接內建已有的第三方網絡庫,如Netty、Mina、Grizzly 等 NIO 架構。
  • Dubbo Remoting子產品詳解(上)Dubbo 整體架構設計圖dubbo-remoting-api 子產品傳輸層核心接口Channel
  • dubbo-remoting-zookeeper使用 Apache Curator 實作了與 Zookeeper 的互動。

dubbo-remoting-api 子產品

是其他 dubbo-remoting-* 子產品的頂層抽象,其他 dubbo-remoting 子子產品都是依賴第三方 NIO 庫實作 dubbo-remoting-api 子產品。

buffer 包

Dubbo Remoting子產品詳解(上)Dubbo 整體架構設計圖dubbo-remoting-api 子產品傳輸層核心接口Channel

定義了緩沖區相關的接口、抽象類以及實作類。在各個 NIO 架構中都有自己的緩沖區實作。但這裡的 buffer 包在更高層面,抽象了各個 NIO 架構的緩沖區,同時也提供了一些基礎實作。

exchange 包

抽象了 Request 和 Response,并為其添加很多特性。這是整個遠端調用核心部分。

transport 包

抽象網絡傳輸層,但隻負責抽象單向消息傳輸,即請求消息由 Client 端發出,Server 端接收;響應消息由 Server 端發出,Client端接收。有很多網絡庫可以實作網絡傳輸,如Netty, transport 包是在網絡庫上層的一層抽象。

傳輸層核心接口

“端點(Endpoint)”,可通過一個 ip 和 port 唯一确定一個端點,兩端點間會建立 TCP 連接配接,雙向傳輸資料。Dubbo 将 Endpoint 之間的 TCP 連接配接抽象為(Channel)通道,将發起請求的 Endpoint 抽象為Client,接收請求的 Endpoint 抽象為Server。

Endpoint 接口

Dubbo Remoting子產品詳解(上)Dubbo 整體架構設計圖dubbo-remoting-api 子產品傳輸層核心接口Channel

getXXX() 用于獲得 Endpoint 本身的一些屬性,如Endpoint 的本地位址、關聯的 URL 資訊以及底層 Channel 關聯的 ChannelHandler。

send() 負責資料發送

close() 及 startClose() 用于關閉底層 Channel

isClosed() 方法用于檢測底層 Channel 是否已關閉

Channel

對 Endpoint 雙方連接配接的抽象,就像傳輸管道。消息發送端往 Channel 寫入消息,接收端從 Channel 讀取消息。

  • 接口的定義

    繼承 Endpoint 接口,也具備開關狀态以及發送資料能力

    可在 Channel 上附加 KV 屬性

  • Dubbo Remoting子產品詳解(上)Dubbo 整體架構設計圖dubbo-remoting-api 子產品傳輸層核心接口Channel