iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
0
Modern Web

我與 ASP.NET Core 的 30天系列 第 26

[Day26] gRPC - 我與 ASP.NET Core 3 的 30天

gRPC簡介

近年來,隨著網站應用程式的需求越來越大,微服務,而服務間的溝通又分成兩種方式:HTTP Request與RPC
RPC(Remote Procedure Call,中文為遠端程序呼叫)是讓原本本地程式呼叫的Method或是function,透過各種網路通訊方式(TCP、UDP、HTTP)讓非本地的遠端機器做呼叫。
而RPC相較於HTTP Request的優點有以下幾點

  • 傳輸效率高
  • 效能消耗較低
  • 自帶負載平衡

因為RPC對於服務間的呼叫有著低消能消耗,高傳輸效率,並且自帶負載平衡,及更容易進行服務治理,所以大部分分散式系統內部都使用RPC的方式進行服務的呼叫。

gRPC是由google開發的開源RPC框架,基於 HTTP/2 協定傳輸,使用Protocol Buffers 作為介面描述語言,並且主打著高性能、跨平台、跨語言。

在ASP.NET Core 中使用 gRPC

在ASP.NET Core 3 開始提供了gRPC的專案範本,以下範例將逐步建立gRPC
首先先透過 .NET CLI 建立gRPC的專案範本
dotnet new grpc -o GrpcSample
建立完畢之後在建立的專案目錄底下使用dotnet watch run啟動服務後會出現以下錯誤
https://ithelp.ithome.com.tw/upload/images/20201010/20129389WJSyA1MoEK.png
這個原因是因為ASP.NET Core gRPC 範本會使用有 TLS的 HTTP/2 來啟動,而 Kestrel 不支援 macOS和舊版 Windows (例如 Windows 7) 上具有 TLS 的 HTTP/2。
所以我們要修改Kestrel的設定,將 Kestrel 和 gRPC 用戶端設定為使用沒有 TLS 的 HTTP/2
Program.cs中設定不含 TLS 的 HTTP/2 端點

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.ConfigureKestrel(options =>
           {
                options.ListenLocalhost(5000, o => o.Protocols = HttpProtocols.Http2);
       });
    webBuilder.UseStartup<Startup>();
});

加入這個設定之後,用戶端也需要設定為不使用 TLS,才有辦法進行連接。


上一篇
[Day25] SignalR - 我與 ASP.NET Core 3 的 30天
下一篇
[Day27] 單元測試 - 我與 ASP.NET Core 3 的 30天
系列文
我與 ASP.NET Core 的 30天31

尚未有邦友留言

立即登入留言