.Net Core3.0使用gRPC

原文: .Net Core3.0使用gRPC

gRPC是什么

gRPC是能够在任何环境中运行的现代开源高性能RPC框架。它能够经过可插拔的支持来有效地链接数据中心内和跨数据中心的服务,以实现负载平衡,跟踪,运行情况检查和身份验证。它也适用于分布式计算的最后一英里,以将设备,移动应用程序和浏览器链接到后端服务。html

proto文件

用于定义gRPC服务和消息的协定;服务端和客户端共享proto文件。后端

使用新模板建立gRPC服务端

.NETcore 3.0建立项目提供了一个新的gRPC模板,能够轻松地使用ASP.NET Core构建gRPC服务。咱们按照步骤一步一步建立AA.GrpcService 服务,固然你可使用命令:dotnet new grpc -o GrpcGreeter浏览器

 选择gRPC服务项目模板网络

最终生成的项目app

greet.proto文件

复制代码
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;
}
复制代码

GreeterService.cs

复制代码
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
            });
        }
    }
复制代码

Startup.cs

复制代码
  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服务的生成,模板项目在后台执行一些操做如框架

  • 建立一个包含全部gRPC依赖项的ASP.NET Core项目。
  • 建立一个名为的gRPC服务定义文件greet.proto。
  • 根据服务定义文件自动生成全部gRPC存根。
  • GreeterService.cs根据自动生成的gRPC存根建立gRPC服务。
  • 在Startup.cs中配置gRPC管道映射到GreeterService.cs

运行服务

建立gRPC客户端

下面,咱们建立一个控制台应用程序做为客户端调用gRPC服务;

引用gRPC服务,步骤:右键项目添加=》服务引用弹出如下页面;

点击肯定

咱们看项目结构,他们会自动帮咱们处理一下操做:

  • 添加引用包:
  1.  package Grpc.Net.ClientFactory
  2.  package Google.Protobuf
  3.  package Grpc.Tools
  • Protos 文件(包含greet.proto)自动从AA.GrpcService项目拷贝
  • 自动添加节点
  <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消息。

参考:

相关文章
相关标签/搜索