.Net Core微服務rpc框架GRPC通信基礎

什麼是rpc?

rpc,全稱Remote Procedure Call,通過它,你可以像調用本地方法一樣調用遠程服務。前端可以調用後端方法,後端也可以調用前端方法。其實這個概念並不陌生,上一篇關於web實時應用的文章也提到瞭這個概念,並實現瞭前後端互調的操作。

在正式開始使用grpc之前,我們還需要掌握protocol buffer的概念。

什麼是grpc?

grpc來自大名鼎鼎的谷歌,孵化於CNCF基金會(docker、k8s同樣出自這個基金會)。它是一款高性能、開源、通用的rpc框架,你可以通過它來定義rpc的請求和響應。它基於http/2,全雙工通信、低延遲、高效率、支持流、可輕松的插入身份認證、負載均衡、監控日志等等等等。。。關鍵是它還可以跨語言操作。隻要server端或client端是它支持的語言編寫,都可以跨語言操作。官方支持的開發語言:

為什麼用protocol buffer?

因為grpc采用合約優先的API開發模式,默認采用protocol buffer作為接口設計語言,我們可以在proto文件裡定義消息和服務。當然,作為默認選項,它自然是有優勢的,主要是這些:

  • 1、語法簡單,容易上手。
  • 2、可生成所有(官方稱)主流開發語言的代碼。
  • 3、二進制格式,效率高的同時也很適合大數據傳輸。

瞭解完基礎以後,先上一個小demo參考一下:

syntax = "proto3";
import "aaa.proto";
option csharp_namespace = "gRPCApiDemo.Protos";

package Demo;

service Math{
    rpc Add (AddRequest) returns (AddRespones);
}

message AddRequest{
    int32 a=1;
    int32 b=2;
}

message AddRespones{
    int32 a=1;
    repeated int32 b=2;  reserved 3,4 to 10;  reserved "phone";}

解讀一下:

  • syntax:聲明當前使用的語法
  • import:引入其他proto
  • option csharp_namespace:打包以後類的命名空間,優先級高
  • package:打包以後類的命名空間,優先級低
  • service:聲明服務
  • rpc Add (AddRequest) returns (AddRespones):聲明一個rpc調用,接收AddRequest消息,返回AddRespones消息。
  • message:聲明消息
  • int32:數據類型,常用的還有int64、float、string、bool等,有興趣的可以去查一下。
  • a=1:如果把a看作字段名,那麼1相當於字段名的別名。
  • repeated:可重復字段。如果給b多個值,那麼b差不多相當於一個int類型的數組,先後順序會被保留。
  • reserved:保留字段,聲明以後的字段名和別名都不允許再使用瞭。需要註意字段名和別名不能一起聲明。

編譯proto

proto編譯的主要目的是生成代碼。

首先是工具,點擊這裡,選出適合自己系統的插件,如圖:

下載完以後隨便找個目錄解壓,然後把其中的bin目錄添加到環境變量裡:

如果在控制臺輸入protoc可以看到一堆信息彈出來,就表示安裝成功瞭:

在我們使用protoc把proto文件編譯成c#文件之前,我們還需要做這些:

  • 1、指定proto項目路徑。

可以用rotoc –IPath(或–proto_path)或者直接打開控制臺轉到protoc安裝目錄。

  • 2、指定生成文件的類型和路徑。
protoc --csharp_out=cs grpcApi.proto   //如果有多個proto文件想批量生成可以使用  *.proto

上面的cs是我新建的文件夾名(這個文件夾是建立在proto項目目錄下的),grpcApi.proto是自建的proto文件,執行結果見圖:

成功以後會在指定的目錄下生成cs文件,見圖:

生成的文件和proto文件命名一樣,隻不過首字母會自動大寫,打開看看:

好吧能看懂的有限,所以看看就行瞭。

不過有一點千萬註意:這個cs文件不要手動改,不要手動改,不要手動改!

關於應用

能使用編譯器生成代碼就可以用瞭麼?其實還差很多。距離正式應用還差服務端和客戶端的編寫部署。

有空的話補下一篇,會有具體實現的流程和代碼。

到此這篇關於.Net Core微服務rpc框架GRPC通信基礎應用的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: