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消息。
参考:
原文出处:https://www.cnblogs.com/chengtian/p/11714694.html