华夏仁家 发表于 2023-10-16 16:27:51

.NET CORE 之 gRPC使用

gRPC简单介绍

gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架(google开源的rpc框架)。gRPC 默认使用 protocol buffers,这是 Google 开源的一套成熟的结构数据序列化机制(也可以使用其他数据格式如 JSON)
 
gRPC 的主要优点是:
 
HTTP2传输
现代高性能轻量级 RPC 框架。
协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现。
可用于多种语言的工具,以生成强类型服务器和客户端。
支持客户端、服务器和双向流式处理调用。
使用 Protobuf 二进制序列化减少对网络的使用。
这些优点使 gRPC 适用于:
 
效率至关重要的轻量级微服务。
需要多种语言用于开发的系统。
需要处理流式处理请求或响应的点对点实时服务。
 
支持语言

https://grpc.io/docs/languages/
 

 
 
 
 
 
Protobuf Proto3对应各语言类型 

Proto3 参考:https://developers.google.com/protocol-buffers/docs/proto3
Proto2 参考:https://developers.google.com/protocol-buffers/docs/proto
 

 

 
 
 
除以上类型,还可以自定义类型
可null类型(google扩展包)

需要导入google.protobuf 包
 import "google/protobuf/wrappers.proto"
 
 

 
google.protobuf 包内容
 

 
 
创建.Net Core gRpc Server项目

运行环境:Window10 ,Visual Studio 2019, Net Core 3.1
 
 

 
创建成功后,项目自动生成Protos文件与Services
 
 

 
 
注意几个点

1. 一个proto文件对应一个Service服务

2. 注入

services.AddGrpc();
当新增一个proto文件和Service服务后,添加以下对应注入
app.UseEndpoints(endpoints => {
endpoints.MapGrpcService();
});
 
3. NuGet包引入

Grpc.AspNetCore
Grpc.Tools
Google.Protobuf
 

 
 
4. 指定Protobuf服务端

默认情况下,会为 Protobuf项组中每个 .proto 文件都生成服务器和客户端资产。 若要确保服务器项目中仅生成服务器资产,请将 GrpcServices 属性设置为 Server。
 
多个proto时,可配置Protos\*.proto
 

 
 
5. 自动生成代码

根据proto文件自动生成.net 代码,当前项目obj\Debug\netcoreapp3.1目录下
 
Proto文件语法说明

我们习惯把通用的单独定义一个common.proto文件,然后通过import方式导入使用,包名.消息名; 集合类型定义使用repeated,枚举类型定义 enum
 
greeter.proto
 

 
common.proto
 
 

 
 
创建.Net Core gRpc Client项目

1. 创建项目

这里创建一个单元测试项目来做client调用
 

 
 
2. 拷贝Protos

把Service项目的Protos整个目录拷贝到项目根目录下
 
3. NuGet包引入

Grpc.AspNetCore
Grpc.Tools
Google.Protobuf
 
4. .csproj配置

确保服务器项目中仅生成客户端资产,请将 GrpcServices 属性设置为 Client。
 

    
  
 
 
5. 添加UnitTest1.cs 单元测试

 

 
 
gRpc使用Http2传输,设置https调用
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
 
GreeterClient 为proto文件自动生成的客户端资产
 
 
gRPC 调试

传统方式

启动Server  与  Client 两个项目,右键解决方案属性 进行设置
 

 
 
命令模式

运行-> cmd -> F:
切换到Client项目目录:cd F:\demo\gRPCDemo\TestProjectUnitDemo
执行命令:dotnet test --filter 类名.方法
例如:dotnet test --filter UnitTest1.GetById
 
 
结束 OVER
 
参考学习地址

https://grpc.io/docs/what-is-grpc/introduction/
https://docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.1
https://docs.microsoft.com/zh-cn/aspnet/core/grpc/protobuf?view=aspnetcore-3.1#scalar-value-types
https://github.com/grpc/

来源:https://www.cnblogs.com/tudouxqc/archive/2023/10/16/17761685.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: .NET CORE 之 gRPC使用