歡迎大家參加4小時Dapr+.NET 5的實戰課程
課程鏈接 https://ke.qq.com/course/4000292?tuin=1271860f

什么是GRPC
gRPC 是一種與語言無關的高性能遠程程序呼叫 (RPC) 框架,
gRPC 的主要優點是:
- 高性能輕量級 RPC 框架,
- 協定優先 API 開發,默認使用協議緩沖區,允許與語言無關的實作,
- 可用于多種語言的工具,以生成強型別服務器和客戶端,
- 支持客戶端、服務器和雙向流式處理呼叫,
- 使用 Protobuf 二進制序列化減少對網路的使用,
這些優點使 gRPC 適用于:
- 效率至關重要的輕量級微服務,
- 需要多種語言用于開發的系統,
- 需要處理流式處理請求或回應的點對點實時服務,
Dapr中的GRPC
Dapr中的GRPC與我們通常情況下使用GRPC大致是一致的,唯一的不同是Dapr中的GRPC會固定呼叫介面/dapr.proto.runtime.v1.AppCallback/OnInvoke,因此我們在Dapr中使用GRPC時,proto檔案中不需要再定義service節點中的rpc介面,只需要定義互動使用的序列化結構體即可,
專案實戰
我們繼續使用FrontEnd+BackEnd專案,首先需要將BackEnd中的監聽協議切換成https,因為GRPC是基于HTTP2實作的,傳輸層使用TLS,
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>().UseUrls("https://*:5000"); });
BackEnd
1.為BackEnd引入Nuget包
- Dapr.AspNetCore
- Grpc.AspNetCore
2.在BackEnd中新建Protos/greet.proto檔案,定義互動的結構體
syntax = "proto3"; option csharp_namespace = "GrpcGreeter"; package greet; message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
注意:不需要定義service.rpc介面,因為Dapr中的GRPC固定呼叫介面/dapr.proto.runtime.v1.AppCallback/OnInvoke,
3.修改專案檔案BackEnd.csproj
<ItemGroup>
<Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
</ItemGroup>
4.新增介面類Services/HelloService
public class HelloService : AppCallback.AppCallbackBase { public override async Task<InvokeResponse> OnInvoke(InvokeRequest request, ServerCallContext context) { var response = new InvokeResponse(); switch (request.Method) { case "sayhi": var input = request.Data.Unpack<HelloRequest>(); response.Data = Any.Pack(new HelloReply { Message = "ok" }); break; } return response; } }
HelloService中我們只需要定義OnInvoke方法,通過request.Method來實作不同業務的代碼撰寫,
5.為grpc注入類
services.AddGrpc();
6.為grpc新增終結點映射
endpoints.MapGrpcService<HelloService>();
FrontEnd
1.為FrontEnd引入Nuget包
- Google.Protobuf
- Grpc.Net.Client
- Grpc.Tools
2.新增Protos/greet.proto檔案
syntax = "proto3"; option csharp_namespace = "GrpcGreeter"; package greet; message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
3.修改FrontEnd.csproj檔案
<ItemGroup> <Protobuf Include="Protos\greet.proto" GrpcServices=“Client" /> </ItemGroup>
4.在DaprController中新增介面
[HttpGet("grpc")] public async Task<ActionResult> GrpcAsync() { using var daprClient = new DaprClientBuilder().Build(); var result = await daprClient.InvokeMethodGrpcAsync<HelloRequest, HelloReply>("backend", "sayhi", new HelloRequest { Name = "aaa" }); return Ok(result); }
測驗
1.運行BackEnd
dapr run --dapr-http-port 3511 --app-port 5000 --app-id backend --app-protocol grpc dotnet .\BackEnd\bin\Debug\net5.0\BackEnd.dll --app-ssl
我們通過--app-protocol grpc指明了使用grpc,通過--app-ssl指明了開啟tls
2.運行FrontEnd
dapr run --dapr-http-port 3501 --app-port 5001 --app-id frontend dotnet .\FrontEnd\bin\Debug\net5.0\FrontEnd.dll
3.呼叫FrontEnd的dapr/grpc介面進行測驗,呼叫成功!!

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/310328.html
標籤:.NET Core
上一篇:CentOS安裝新版Git
下一篇:CentOS安裝新版Git
