.NET Core 微服務之grpc初體驗

GitHub: https://github.com/grpc/grpc

 

gRPC是一個高性能、通用的開源RPC框架,其由Google主要面向移動應用開發並基於HTTP/2協議標準而設計,基於ProtoBuf(Protocol Buffers)序列化協議開發,且支持衆多開發語言。gRPC提供了一種簡單的方法來精確地定義服務和爲iOS、Android和後臺支持服務自動生成可靠性很強的客戶端功能庫。客戶端充分利用高級流和鏈接功能,從而有助於節省帶寬、降低的TCP鏈接次數、節省CPU使用、和電池壽命。

gRPC支持多種語言,並能夠基於語言自動生成客戶端和服務端功能庫。目前,在GitHub上已提供了C版本grpc、Java版本grpc-java 和 Go版本grpc-go,其它語言的版本正在積極開發中,其中 grpc支持C、C++、Node.js、Python、Ruby、Objective-C、PHP和C#等語言,grpc-java已經支持Android開發。

gRPC已經應用在Google的雲服務和對外提供的API中,其主要應用場景如下:

低延遲、高擴展性、分佈式的系統
同雲服務器進行通信的移動應用客戶端
設計語言獨立、高效、精確的新協議
便於各方面擴展的分層設計,如認證、負載均衡、日誌記錄、監控等

 

上邊是官方腔調介紹,總結下來就幾點,跨平臺,可靠,通信快,擴展性強,

 貌似現在還出了個前端的grcp-web,.proto 來定義客戶端 Web 應用程序和後端 gRPC 服務器之間的服務“契約”,並自動生成客戶端 JavaScript 與服務端同行

 畢竟google出品,不多說,🐮🍺。

 

 是騾子是馬拉出來溜溜

 

.NET core

 

編寫跨語言服務文件(.proto) 

具體語法可以谷歌或者百度一下,主要方法的定義有點不一樣,但是基本就是我下面這樣定義,數據類型都是一樣的。大差不差

syntax ="proto3";

option java_multiple_files = true;
option java_package = "md.logservice";
option java_outer_classname = "Logger";
option objc_class_prefix = "LLL";

package gRPCTest;
  

service gRPC {  
    /*
    *方法
    */
    rpc SayHello (TestRequest) returns(TestReply) {}  
}  
   
/*
*請求對象
*/
message TestRequest {  
    string name = 1;
}  
/*
*返回對象
*/
message TestReply {  
    string message = 1;
}  

編寫成功後,接下來咱們就要把proto文件生成爲C#代碼了

先創建一個控制檯項目

通過NuGet應用如下文件

 

 

 這時開始用到了tools, 這個tools就是個解析grpc proto文件的工具,在nuget下載類庫時會自動下載帶目錄下

建議新建一個文件夾專門用了處理proto文件。這裏只說windows下怎麼解析proto文件。解析proto會自動生成Markdown接口文檔,很方便有木有

 

這裏說一下generate.bat批處理文件怎麼寫

setlocal

@rem enter this directory
cd /d %~dp0

set TOOLS_PATH=D:\grpcTest\Tools\Grpc.Tools.1.2.0\tools\windows_x64
set DOC_TOOL_PATH=D:\grpcTest\Tools\doc

%TOOLS_PATH%\protoc.exe -I./protos --csharp_out build ./protos/test.proto --grpc_out build --plugin=protoc-gen-grpc=%TOOLS_PATH%\grpc_csharp_plugin.exe



%TOOLS_PATH%\protoc.exe -I./protos --plugin=protoc-gen-doc=%DOC_TOOL_PATH%\protoc-gen-doc.exe --doc_out=markdown,test.md:./doc protos/test.proto

endlocal
PAUSE

 

其實這就是一個批處理命令,但是網上很多資料複製都是報錯,運行時候各種報錯,神特麼煩,也不跟你細說選項作用,注意事項。

 下面咱們就詳細說說

     A、set TOOLS_PATH=D:\grpcTest\Tools\Grpc.Tools.1.2.0\tools\windows_x64 就是設置tools解析工具所在目錄,下面一個set時設置接口文檔生成目錄,如果不需要生成grpc文檔,可不寫

     B、 -I 指定一個或者多個目錄,用來搜索.proto文件的。注意:如果不指定,那就是當前目錄,沒毛病。

     C、--csharp_out 生成C#代碼,當然了還能cpp_out、java_out、javanano_out、js_out、objc_out、php_out、python_out、ruby_out 這時候你就應該知道,這玩意就是支持多語言的,才用的,生成一些文件,然後給各個語言平臺調用。參數1是輸出路徑,參數2是proto的文件名或者路徑。 

     D、--grpc_out 到這裏可能有人會懵逼,咋回事?C#不是有一個自己的輸出目錄麼?怎麼又一個輸出?  

            csharp_out是輸出類似於咱們平時寫的實體類,接口,定義之類的。生成的文件叫,額,就叫xxx.cs吧.

            grpc_out是跟服務相關,創建,調用,綁定,實現相關。生成的玩意叫xxxGrpc.cs。 對比上個選項生成的文件名,大概能瞭解個十之八九吧。

     E、--plugin=protoc-gen-grpc=grpc_csharp_plugin.exe 這個就是csharp的插件,python有python的,java有java的。你不指定它,你毛都生成不了。

 

接下來咱們直接上代碼了

代碼挺簡單的,簡單到我不好意思貼代碼,直接上圖吧

說下需要注意的兩個點,就是客戶端和服務端都需要引用生成的grpc文件

服務端代

 

 

客戶端代碼

 

先啓動服務端,然後啓動客戶端 

運行成功後如下圖

服務端

 

 客戶端

 

 

 可以看到,已經調用成功了。

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