rpc調用

  1. 同步調用
    客戶方等待調用執行完成並返回結果。
  2. 異步調用
    客戶方調用後不用等待執行結果返回,但依然可以通過回調通知等方式獲取返回結果。
    若客戶方不關心調用返回結果,則變成單向異步調用,單向調用不用返回結果。

這裏寫圖片描述

RPC 服務方通過 RpcServer 去導出(export)遠程接口方法,而客戶方通過 RpcClient 去引入(import)遠程接口方法。客戶方像調用本地方法一樣去調用遠程接口方法,RPC 框架提供接口的代理實現,實際的調用將委託給代理RpcProxy 。代理封裝調用信息並將調用轉交給RpcInvoker 去實際執行。在客戶端的RpcInvoker 通過連接器RpcConnector 去維持與服務端的通道RpcChannel,並使用RpcProtocol 執行協議編碼(encode)並將編碼後的請求消息通過通道發送給服務方。

RPC 服務端接收器 RpcAcceptor 接收客戶端的調用請求,同樣使用RpcProtocol 執行協議解碼(decode)。解碼後的調用信息傳遞給RpcProcessor 去控制處理調用過程,最後再委託調用給RpcInvoker 去實際執行並返回調用結果。

RPC 組件職責:
1. RpcServer
負責導出(export)遠程接口
2. RpcClient
負責導入(import)遠程接口的代理實現
3. RpcProxy
遠程接口的代理實現
4. RpcInvoker
客戶方實現:負責編碼調用信息和發送調用請求到服務方並等待調用結果返回
服務方實現:負責調用服務端接口的具體實現並返回調用結果
5. RpcProtocol
負責協議編/解碼
6. RpcConnector
負責維持客戶方和服務方的連接通道和發送數據到服務方
7. RpcAcceptor
負責接收客戶方請求並返回請求結果
8. RpcProcessor
負責在服務方控制調用過程,包括管理調用線程池、超時時間等
9. RpcChannel
數據傳輸通道

RPC 實現分析:
導出遠程接口
導出遠程接口的意思是指只有導出的接口可以供遠程調用,而未導出的接口則不能。在 java 中導出接口的代碼片段可能如下:

DemoService demo = new …;
RpcServer server = new …;
server.export(DemoService.class, demo, options);

我們可以導出整個接口,也可以更細粒度一點只導出接口中的某些方法,如:
// 只導出 DemoService 中籤名爲 hi(String s) 的方法
server.export(DemoService.class, demo, “hi”, new Class

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章