马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

.Net Core3.0使用gRPC

[复制链接]
查看3180 | 回复0 | 2019-10-22 09:05:00 | 显示全部楼层 |阅读模式

090504voj00o5k0ff5537u.png

gRPC是什么

gRPC是可以在任何情况中运行的今世开源高性能RPC框架。它可以通过可插拔的支持来有用地毗连数据中心内和跨数据中心的服务,以实现负载均衡,跟踪,运行状况查抄和身份验证。它也适用于分布式盘算的末了一英里,以将装备,移动应用步伐和欣赏器毗连到后端服务。

proto文件

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

利用新模板创建gRPC服务端

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

选择gRPC服务项目模板

090505ngol2jrfgzfmujdg.png

终极天生的项目

090506tltku9z8fyh8a9lz.png

greet.proto文件

  1. syntax = "proto3";
  2. option csharp_namespace = "AA.GrpcService";
  3. package Greet;
  4. // The greeting service definition.
  5. service Greeter {
  6. // Sends a greeting
  7. rpc SayHello (HelloRequest) returns (HelloReply);
  8. }
  9. // The request message containing the user's name.
  10. message HelloRequest {
  11. string name = 1;
  12. }
  13. // The response message containing the greetings.
  14. message HelloReply {
  15. string message = 1;
  16. }
复制代码

GreeterService.cs

  1. public class GreeterService : Greeter.GreeterBase
  2. {
  3. private readonly ILogger<GreeterService> _logger;
  4. public GreeterService(ILogger<GreeterService> logger)
  5. {
  6. _logger = logger;
  7. }
  8. public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
  9. {
  10. return Task.FromResult(new HelloReply
  11. {
  12. Message = "Hello " + request.Name
  13. });
  14. }
  15. }
复制代码

Startup.cs

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. services.AddGrpc();
  4. }
  5. public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
  6. {
  7. if (env.IsDevelopment())
  8. {
  9. app.UseDeveloperExceptionPage();
  10. }
  11. app.UseRouting();
  12. app.UseEndpoints(endpoints =>
  13. {
  14. endpoints.MapGrpcService<GreeterService>();
  15. endpoints.MapGet("/", async context =>
  16. {
  17. 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");
  18. });
  19. });
  20. }
复制代码

创建完成之后,主动包罗了包的引用、proto文件的创建、services服务的天生,模板项目在配景执行一些操纵如

  • 创建一个包罗全部gRPC依赖项的ASP.NET Core项目。
  • 创建一个名为的gRPC服务界说文件greet.proto。
  • 根据服务界说文件主动天生全部gRPC存根。
  • GreeterService.cs根据主动天生的gRPC存根创建gRPC服务。
  • 在Startup.cs中配置gRPC管道映射到GreeterService.cs

运行服务

090506rnvdgbfqubqb7d0c.png

创建gRPC客户端

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

090506ext0zfpt0w20p7tt.png

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

090506q33yyrgj45gp77js.png

点击确定

090507z2hk2c4j72pwc86a.png

090507jvz64vtz5b73y6e6.png

我们看项目布局,他们会主动帮我们处理处罚一下操纵:

  • 添加引用包:
  1. package Grpc.Net.ClientFactory
  2. package Google.Protobuf
  3. package Grpc.Tools
  • Protos 文件(包罗greet.proto)主动从AA.GrpcService项目拷贝
  • 主动添加节点
  1. <ItemGroup>
  2. <Protobuf Include="..\AA.GrpcService\Protos\greet.proto" GrpcServices="Client">
  3. <Link>Protos\greet.proto</Link>
  4. </Protobuf>
  5. </ItemGroup>
复制代码

末了,添加以下代码举行gRPC哀求;

  1. class Program
  2. {
  3. static async Task Main(string[] args)
  4. {
  5. using var channel = GrpcChannel.ForAddress("https://localhost:5005");
  6. var client = new Greeter.GreeterClient(channel);
  7. var response = await client.SayHelloAsync(new HelloRequest { Name = "gRPC" });
  8. Console.WriteLine("Greeting:" + response.Message);
  9. Console.WriteLine("Press a key to exit");
  10. Console.ReadKey();
  11. }
  12. }
复制代码

运行结果图:

090507xmfi6388zi844p36.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






来源:https://www.cnblogs.com/chengtian/p/11714694.html
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则