当前位置: 首页>前端>正文

grpc调用demo grpc调用通道会立即销毁嘛

gRPC简单介绍

gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架(google开源的rpc框架)。gRPC 默认使用 protocol buffers,这是 Google 开源的一套成熟的结构数据序列化机制(也可以使用其他数据格式如 JSON)

gRPC 的主要优点是:

HTTP2传输

现代高性能轻量级 RPC 框架

协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现

可用于多种语言的工具,以生成强类型服务器和客户端

支持客户端、服务器和双向流式处理调用

使用 Protobuf 二进制序列化减少对网络的使用

这些优点使 gRPC 适用于:

效率至关重要的轻量级微服务

需要多种语言用于开发的系统

需要处理流式处理请求或响应的点对点实时服务

支持语言

Supported languages | gRPC

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_rpc,第1张

Protobuf Proto3对应各语言类型 

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

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

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_java_02,第2张

 

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_.netcore_03,第3张

除以上类型,还可以自定义类型

可null类型(google扩展包)

需要导入google.protobuf 包

import "google/protobuf/wrappers.proto"

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_.netcore_04,第4张

google.protobuf 包内容

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_服务器_05,第5张

创建.Net Core gRpc Server项目

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

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

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_java_06,第6张

注意几个点

  1. 一个proto文件对应一个Service服务
  2. 注入
services.AddGrpc();

当新增一个proto文件和Service服务后,添加以下对应注入

app.UseEndpoints(endpoints => { 
endpoints.MapGrpcService<GreeterService>(); 
});
  1. NuGet包引入
Grpc.AspNetCore
Grpc.Tools
Google.Protobuf

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_rpc_07,第7张

  1. 指定Protobuf服务端

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

多个proto时,可配置Protos\*.proto

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_grpc调用demo_08,第8张

  1. 自动生成代码

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

Proto文件语法说明

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

greeter.proto

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_.netcore_09,第9张

common.proto

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_.netcore_10,第10张

创建.Net Core gRpc Client项目

  1. 创建项目

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

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_grpc调用demo_11,第11张

  1. 拷贝Protos

把Service项目的Protos整个目录拷贝到项目根目录下

  1. NuGet包引入
Grpc.AspNetCore
Grpc.Tools
Google.Protobuf
  1. .csproj配置

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

<ItemGroup>
    <Protobuf Include="Protos\*.proto" GrpcServices="Client" />
  </ItemGroup>
  1. 添加UnitTest1.cs 单元测试

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_rpc_12,第12张

gRpc使用Http2传输,设置https调用

AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);

GreeterClient 为proto文件自动生成的客户端资产

gRPC 调试

传统方式

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

grpc调用demo grpc调用通道会立即销毁嘛,grpc调用demo grpc调用通道会立即销毁嘛_服务器_13,第13张

命令模式

不需要启动Client项目,直接调试Server项目

运行-> cmd ->  F:

切换到Client项目目录:cd F:\demo\gRPCDemo\TestProjectUnitDemo

执行命令:dotnet test --filter 类名.方法

例如:dotnet test --filter UnitTest1.GetById

结束 OVER

参考学习地址

Introduction to gRPC | gRPC

.NET 上的 gRPC 的简介 | Microsoft Docs

为 .NET 应用创建 Protobuf 消息 | Microsoft Docs

https://github.com/grpc/


https://www.xamrdz.com/web/2g91964364.html

相关文章: