RPC(遠程過程調用) 的架構最常見的是“動態代理”方式,事先定義好接口,用一個代理假裝實現了這個接口(真正的實現放在服務端),供客戶端調用,代理內部將該方法調用封裝成一個網絡請求送到服務端。服務端根據參數找到對應的注冊好的對象處理,返回給客戶端。
官網的gRPC的宏觀的架構圖如下:
客戶端調用 stub 對象,所謂 stub 對象就類似代理對象一樣。作為跟服務通訊的封裝抽象。
在 gRPC 里,stub 對象將請求用 protobuf 方式序列化成字節流,用於線上傳輸,到 server 端后調用真正的實現對象處理。
Java 的客戶端和服務器實現也是遵循這個架構的。
gRPC-Java 的插件會給我們自動產生一個 GreeterGrpc(招待員類)封裝了三種跟服務器接口通訊的方案:
- 同步阻塞調用;
- 異步回調;
- 同步非阻塞。
對於 Stub ,可以用下面思維導圖簡單描述:
客戶端的調用都是通過 Stub的。
所有 Stub 的 new 都需要傳入一個 channel 參數。
管道層 gRPC 默認提供了 4鍾 Channel,如下圖:
參考資料:
gRPC 入門及源碼分析
http://evthoriz.com/2015/07/07/gRPC-tutorial/




