.NET Core愛gRPC

  • 2019 年 12 月 4 日
  • 筆記

這是微軟.NET團隊的項目經理Sourabh Shirhatti的一篇客座文章。

自2018年11月以來,微軟的.NET團隊一直與gRPC團隊密切合作,為.NET Core開發新的完全託管的gRPC實現。

我們很高興地宣布,grpc-dotnet現在已經可以在.NET Core 3.0使用了!

如何獲得?

grpc-dotnet包剛剛發布到NuGet.org,已經可以在你的項目中使用。這些包還需要最新的.NET Core 3.0共享框架。你可以為開發機和構建伺服器下載.NET Core 3.0 SDK,從.NET Core 3.0 download page下載頁面來獲取共享框架。

https://www.nuget.org/profiles/grpc-packages

https://aka.ms/netcore3download

開始

由於gRPC現在是.NET生態系統中的一等公民,所以.NET SDK中包含了gRPC模板。要開始,請在安裝SDK後,到控制台窗口並運行以下命令。

dotnet new grpc -o GrpcGreeter  cd GrpcGreeter  dotnet run

要創建一個gRPC客戶端並使用新創建的gRPC Greeter服務進行測試,你可以按照本教程的其餘部分進行操作。

https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/grpc/grpc-start

gRPC不是已經和.NET Core兼容了嗎?

目前有兩個官方gRPC給.NET的實現:

  • Grpc.Core:基於原生gRPC Core庫的gRPC C#實現。 https://github.com/grpc/grpc/tree/master/src/csharp
  • grpc-dotnet:完全用C#編寫的新實現,沒有原生依賴,基於最新發布的.NET Core 3.0。 https://github.com/grpc/grpc-dotnet

這些實現並存,並且在可用特性、集成、支援平台、成熟度級別和性能方面各有優勢。這兩個實現共享調用和處理rpc的相同API,從而限制了鎖定,並允許用戶選擇最能滿足他們需求的實現。

有什麼新鮮事嗎?

與現有的基於C-Core的實現(Grpc.Core)不同,新的庫(grpc-dotnet)利用了.NET Core Base Class Libraries(BCL)中現有的網路功能。下圖突出顯示了現有Grpc.Core和新的grpc-dotnet庫之間的差異。

在伺服器端,Grpc.AspNetCore.Server程式包集成到ASP.NET Core中,使開發者可以受益於日誌、配置、依賴項注入、身份驗證、授權等常見的跨領域問題,這些問題已由ASP.NET Core解決。現在,ASP.NET生態系統中的流行庫,例如,Entity Framework Core(ORM)、Serilog(日誌記錄庫)和Identity Server等,可與gRPC無縫協作。

在客戶端,Grpc.Net.Client程式包基於作為.NET Core一部分提供的熟悉的HttpClient API構建。與伺服器一樣,gRPC客戶端從基於HttpClient的軟體包生態系統中受益匪淺。現在可以在gRPC客戶端中使用現有的程式包,例如Polly(恢復力和故障處理庫)和HttpClientFactory(管理HTTPClient生存期)。

下圖捕獲了gRPC的所有新.NET軟體包的詳盡列表,以及它們與現有軟體包的關係。

除了作為grpc-dotnet的一部分新發布的包之外,我們還對兩個棧都進行了改進。Visual Studio 2019提供了對protobuf文件的語言語法支援,並在保存protobuf文件時自動生成gRPC伺服器/客戶端程式碼,而無需根據設計時構建進行全面的項目重構。

回饋

我們對於為.NET開發者改進gRPC體驗感到非常興奮。請嘗試一下,讓我們在grpc-dotnet問題跟蹤器上了解你可能遇到的任何特性想法或bug。

https://github.com/grpc/grpc-dotnet/issues