.Net Core3.0使用gRPC

本文介绍如何使用.NET Core 3.0创建gRPC服务,包括项目模板、proto文件定义、服务端和客户端的创建过程。gRPC是一个高性能的RPC框架,适用于微服务、实时通信和多语言环境。

640?wx_fmt=png

gRPC是什么

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

proto文件

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

使用新模板创建gRPC服务端

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

 选择gRPC服务项目模板

640?wx_fmt=png

最终生成的项目

640?wx_fmt=png

greet.proto文件
GreeterService.cs
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

运行服务

640?wx_fmt=png

创建gRPC客户端

下面,我们创建一个控制台应用程序作为客户端调用gRPC服务;

640?wx_fmt=png

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

640?wx_fmt=png

点击确定

640?wx_fmt=png

640?wx_fmt=png

我们看项目结构,他们会自动帮我们处理一下操作:
  • 添加引用包:

  1.  package Grpc.Net.ClientFactory

  2.  package Google.Protobuf

  3.  package Grpc.Tools

  • Protos 文件(包含greet.proto)自动从AA.GrpcService项目拷贝

  • 自动添加节点

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();	
        }	
    }

运行结果图:

640?wx_fmt=png

小结:.NETcore 3.0 使得使用gRPC是非常方便集成到项目中,希望这篇文章使你可以了解.NETcore与gRPC结合使用。那gRPC适用于以下场景

  • 微服务– gRPC专为低延迟和高吞吐量通信而设计。gRPC对于效率至关重要的轻量级微服务非常有用。

  • 点对点实时通信– gRPC对双向流具有出色的支持。gRPC服务可以实时推送消息而无需轮询。

  • 多种语言环境– gRPC工具支持所有流行的开发语言,因此gRPC是多语言环境的理想选择。

  • 网络受限的环境– gRPC消息使用轻量级消息格式Protobuf进行了序列化。gRPC消息始终小于等效的JSON消息。

参考:

  • https://docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.0

  • https://www.grpc.io/

  • https://developers.google.com/protocol-buffers/docs/proto3

  • https://www.cnblogs.com/stulzq/p/11581967.html

相关文章

640?wx_fmt=jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值