写点什么

.NET CORE 之 gRpc 使用

作者:gogo
  • 2023-11-03
    广东
  • 本文字数:1455 字

    阅读完需:约 5 分钟

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

});

 

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。

 

<ItemGroup>

    <Protobuf Include="Protos\*.proto" GrpcServices="Client" />

  </ItemGroup>

 

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/

用户头像

gogo

关注

还未添加个人签名 2020-05-24 加入

态度决定人生高度.

评论

发布
暂无评论
.NET CORE 之gRpc使用_gogo_InfoQ写作社区