gRPC是能夠在任何環境中運行的現代開源高性能RPC框架。它能夠經過可插拔的支持來有效地鏈接數據中心內和跨數據中心的服務,以實現負載平衡,跟蹤,運行情況檢查和身份驗證。它也適用於分佈式計算的最後一英里,以將設備,移動應用程序和瀏覽器鏈接到後端服務。html
用於定義gRPC服務和消息的協定;服務端和客戶端共享proto文件。後端
.NETcore 3.0建立項目提供了一個新的gRPC模板,能夠輕鬆地使用ASP.NET Core構建gRPC服務。咱們按照步驟一步一步建立AA.GrpcService 服務,固然你可使用命令:dotnet new grpc -o GrpcGreeter瀏覽器
選擇gRPC服務項目模板網絡
最終生成的項目app
syntax = "proto3"; option csharp_namespace = "AA.GrpcService"; package Greet; // The greeting service definition. service Greeter { // Sends a greeting rpc SayHello (HelloRequest) returns (HelloReply); } // The request message containing the user's name. message HelloRequest { string name = 1; } // The response message containing the greetings. message HelloReply { string message = 1; }
public class GreeterService : Greeter.GreeterBase { private readonly ILogger<GreeterService> _logger; public GreeterService(ILogger<GreeterService> logger) { _logger = logger; } public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context) { return Task.FromResult(new HelloReply { Message = "Hello " + request.Name }); } }
public void ConfigureServices(IServiceCollection services) { services.AddGrpc(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapGrpcService<GreeterService>(); endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909"); }); }); }
建立完成以後,自動包含了包的引用、proto文件的建立、services服務的生成,模板項目在後臺執行一些操做如框架
<ItemGroup> <Protobuf Include="..\AA.GrpcService\Protos\greet.proto" GrpcServices="Client"> <Link>Protos\greet.proto</Link> </Protobuf> </ItemGroup>
最後,添加如下代碼進行gRPC請求;async
class Program { static async Task Main(string[] args) { using var channel = GrpcChannel.ForAddress("https://localhost:5005"); var client = new Greeter.GreeterClient(channel); var response = await client.SayHelloAsync(new HelloRequest { Name = "gRPC" }); Console.WriteLine("Greeting:" + response.Message); Console.WriteLine("Press a key to exit"); Console.ReadKey(); } }
運行結果圖:分佈式
小結: .NETcore 3.0 使得使用gRPC是很是方便集成到項目中,但願這篇文章使你能夠了解.NETcore與gRPC結合使用。那gRPC適用於如下場景ide
微服務– gRPC專爲低延遲和高吞吐量通訊而設計。 gRPC對於效率相當重要的輕量級微服務很是有用。微服務
點對點實時通訊– gRPC對雙向流具備出色的支持。 gRPC服務能夠實時推送消息而無需輪詢。
多種語言環境– gRPC工具支持全部流行的開發語言,所以gRPC是多語言環境的理想選擇。
網絡受限的環境– gRPC消息使用輕量級消息格式Protobuf進行了序列化。 gRPC消息始終小於等效的JSON消息。
參考: