dubbo-remoting 子產品提供了多種用戶端和服務端通信功能。
最底層部分即為 Remoting 層
包括 Exchange、Transport和Serialize 三層。本文主要描述 Exchange 和 Transport 兩層。Dubbo 整體架構設計圖
- Dubbo直接內建已有的第三方網絡庫,如Netty、Mina、Grizzly 等 NIO 架構。
- dubbo-remoting-zookeeper使用 Apache Curator 實作了與 Zookeeper 的互動。
dubbo-remoting-api 子產品
是其他 dubbo-remoting-* 子產品的頂層抽象,其他 dubbo-remoting 子子產品都是依賴第三方 NIO 庫實作 dubbo-remoting-api 子產品。
buffer 包
定義了緩沖區相關的接口、抽象類以及實作類。在各個 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 接口
getXXX() 用于獲得 Endpoint 本身的一些屬性,如Endpoint 的本地位址、關聯的 URL 資訊以及底層 Channel 關聯的 ChannelHandler。
send() 負責資料發送
close() 及 startClose() 用于關閉底層 Channel
isClosed() 方法用于檢測底層 Channel 是否已關閉
Channel
對 Endpoint 雙方連接配接的抽象,就像傳輸管道。消息發送端往 Channel 寫入消息,接收端從 Channel 讀取消息。
-
接口的定義
繼承 Endpoint 接口,也具備開關狀态以及發送資料能力
可在 Channel 上附加 KV 屬性