.NET Core 微服務之grpc 初體驗(乾貨)

  Grpc介紹php

 

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

 

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

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

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

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

 

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

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

 畢竟google出品,很少說,🐮🍺。windows

 

 是騾子是馬拉出來溜溜後端

 

.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文件

服務端代

 

 

客戶端代碼

 

 

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

運行成功後以下圖

服務端

 

 客戶端

 

 

 能夠看到,已經調用成功了。

 

結束

 

對了,我司基本上都是用.net core 微服務了,和其餘部門都是經過微發rpc形式合做,後面視狀況,一步一步介紹.net 微服務的其方面, 好比 微服務docker部署 本地運行k8s,服務治理,kafka日誌收集等都分享給你們, 我們的.net core 氛圍愈來愈好了。

感謝各位老鐵能看到最後,謝謝 

拜拜~~~(無彩蛋)

相關文章
相關標籤/搜索