springboot+GRPC传输流式数据和集合对象

  • 概述
  • 项目结构和实现步骤
  • demo实现
  • 接口文件部分
  • 服务端
  • 客户端
  • 运行结果


概述

整个demo是在上一篇springboot+GRPC传输简单数据的基础上添加的内容,如有什么不明白的地方可参考上一篇文档。

项目结构和实现步骤

  • 整个demo依然是分为了三个部分:接口定义部分服务器端客户端
  • 整个demo实现了传输流式数据和传输集合对象的结合使用

整个demo的实现步骤:

  1. 依然是在demo-proto模块中使用protobuf定义接口proto文件,使用build方法生成对应程序代码
  2. 在demo-server模块中重写传输方法
  3. 在demo-client中发送请求,获取返回数据
  4. 在浏览器中输出返回数据结果,并在浏览器中打印出来

demo实现

接口文件部分

在demo-proto接口文件中新增流式数据消息格式,在流式返回数据中添加一个集合对象,实现返回数据中可有集合对象。以及添加传输流式数据的StreamServerHello方法
代码如下所示:

//流式响应消息
message StreamResponse{
    int32 code=1;
    string message=2;
    int32 count=3;
    repeated CommonResponse record=4;
}

service Simple{
    rpc Hello(CommonRequest) returns(CommonResponse){}

    rpc StreamServerHello(CommonRequest) returns(stream StreamResponse){}
}

把定义的传输消息的内容、方法添加完成后,使用build方法生成对应的程序代码,为服务端调用做好准备。

服务端

  • demo所需要的依赖和端口设置没有什么改变,在这里不再加以赘述
  • 在demo-server服务端引入demo-proto模块后,继承SimpleGrpc.SimpleImplBase类后,重写streamServerHello方法

代码如下所示:

grpc返回datatable grpc返回值为对象_grpc返回datatable

客户端

  • 客户端demo-client也没有添加什么新的依赖端口也没有进行更改,在接收的返回数据中没有使用JSON进行处理,所以配置文件就不再加以赘述
  1. 在demo-client客户端添加发送请求的方法,并且解析服务端返回的流式数据

方法具体代码如下:

grpc返回datatable grpc返回值为对象_传输流式数据_02


:在这里没有把返回的数据使用JSON进行处理,只是简单的把返回的数据转成字符串作为返回对象。

  1. 在控制器中使用RequestMapping注解添加访问发送请求的方法,并且获取浏览器URL中输入的参数内容

代码如下:

grpc返回datatable grpc返回值为对象_传输流式数据_03

运行结果

分别启动客户端和服务端

服务端启动结果如图所示:

grpc返回datatable grpc返回值为对象_传输集合对象_04


客户端启动结果如图所示:

grpc返回datatable grpc返回值为对象_传输流式数据_05


demo最后运行结果如下所示:

grpc返回datatable grpc返回值为对象_grpc返回datatable_06


本文整个demo的实现在上一篇文档的基础上完成的,如果有什么不明白的地方可参考上一篇文章gRPC----gRPC(springboot)传输简单数据