net core 3.0 之Grpc新特性小試牛刀


 

  相信微服務大家伙都有聽說和知道,好處弊端咱也不多說了,Grpc算是一個比較全面的微服務框架,也得到微軟的支持

  總結下來就是,跨平台,可靠,通信快,擴展性強,網絡消耗小,模板多語言通用

   

  光說好處,沒有弊端嗎,自然是有的

  最大的問題可能就是無法直接通過瀏覽器調用Grpc服務,最主要是Grpc使用了Http/2傳輸而瀏覽器不允許調用方需要使用 HTTP/2,或提供對基礎 HTTP/2 框架的訪問

但是官方也提供了曲線救國的方式,gRPC Web是 gRPC 團隊提供有限的 gRPC 支持在瀏覽器中的其他技術(引用官方文檔)。

  話不多說,咱們直接先上兩個官方鏈接,

  https://grpc.io/docs/

  https://docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.0

 

  和HttpApi有啥區別,如下圖

 

  看的出來微軟對Grpc得支持還挺上心得,居然把Grpc放到3.0中直接提供官方支持,還可以直接生成應模板,看來微軟真的在開源的道路上大步前行啊。

咱就不說一些理論性的東西了,上邊鏈接里得文章介紹得比我官方詳細。現在.NetCore 3.0還處於預覽版,正式版出來相信會有更好的支持和體驗

 

  Grpc在3.0中, 也是遵循微軟一貫的風格,對開發者友好,極度舒適得開發體驗。重大變化的變化

3.0支持編寫好的.proto文件直接. 方法名,就可以使用,無需把proto文件生成為.cs 文件再引用到項目中(微軟默默幫我們做好了,咱只要定義好protoi接口和參數,關心代碼業務就行了)🐮🍺

 

  老的Grpc使用方式及介紹點這里,之前有介紹

 

  咱們實際運用起來效果如何,開發用起來爽不爽,咱也不廢話,直接開整

 

 

 

 

  開發工具:Visual Studio 2019

  框架:.net core 3.0 (目前最新版 v3.0.100-preview8)

 

  3.0目前處於預覽版,官方沒有集成到vs里,咱們要手動下載 點這里

 

  下載好了之后要在VS里手動開啟支持3.0 .net core SDK(目前3.0只能在VS2019上運行,正式版出來可能會支持其他版本VS)

 

 

一、創建項目

  兩種方式,都可以

  1、通過命令一鍵生成基於Grpc模板的項目

 

dotnet new grpc

 

 

 

  2、通過傳統方式創建

 

 

  創建好的項目長這樣

 

 

我們一定會注意到 Startup 類中 ConfigureServices 方法的語句 services.AddGrpc() 。這個是慣例,不用去管,重點看 Configure 方法里的代碼片段:

 

app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapGrpcService<GreeterService>();
}); 

 

  此處和WCF 的思想類似,將服務添加到路由終結點,讓客戶端連接。

 

  接下來看看proto文件 ,咱們稍微改造一下

 

syntax = "proto3";


option csharp_namespace = "GrpcGreeter";


package Greet;

service Greeter {
  // 方法體
  rpc SayHello (HelloRequest) returns (HelloReply);
  
  //這是咱新增的方法
  rpc HelloWorld (HelloRequest) returns (HelloReply);
}


// 請求參數
message HelloRequest {
  string name = 1;
  
}


// 響應實體
message HelloReply {
  string message = 1; //數據類型和C#大差不差
  int32 code=2;
}

 

 
        

  咱們再創建一個控制台程序用做客戶端好了(實際項目中就是各個模塊的其他項目),用來調用Grpc微服務。

  創建好了后,安裝Nuget包

  

    Install-Package Grpc.Net.Client -Version 0.1.22-pre3
    Install-Package Google.Protobuf
    Install-Package Grpc.Tools

 

  把proto文件復制到客戶端項目中

  這里有一點要住,把解決方案文件打開,把里面有配置

<ItemGroup>
   <!-- GrpcServices="Client" 添加該屬性構建相關客戶端類文件(元數據) -->
   <!-- GrpcServices="Server" 添加該屬性構建相關服務端端類文件(元數據) -->
    <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
  </ItemGroup>

  

 
        

  可以看到如下圖,重點介紹一下新特性,可以像正常些C#代碼一樣,直接點出Grpc里定義的方法

 

 

一頓操作猛如虎

 

 

代碼相對簡單直接截圖,最后直接上結果,咱們一看就懂

客戶端執行結果

 

服務端輸出

 

在3.0版本之前,要使用Grpc微服務,proto文件需要先生成好CS類文件,生成CS類文件還是比較費事兒的.然后把生成好的CS類文件引用到項目中才可以。其實在開發中我們並不需要關心這些,只是由於.net 跨平台來的稍稍晚一點,慢慢的這些腳手架類的東西會越來越完善

可以看出微軟也預見了這些事,在.net core 3.0提供了類似自動化的支持。

 

 

 

 

 

 

如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!
本文版權歸作者和博客園共有,來源網址:https://www.cnblogs.com/DanielYao/歡迎各位轉載,但是未經作者本人同意,轉載文章之后必須在文章頁面明顯位置給出作者和原文連接,否則保留追究法律責任的權利

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM