springboot+GRPC传输流式数据和集合对象
- 概述
- 项目结构和实现步骤
- demo实现
- 接口文件部分
- 服务端
- 客户端
- 运行结果
概述
整个demo是在上一篇springboot+GRPC传输简单数据的基础上添加的内容,如有什么不明白的地方可参考上一篇文档。
项目结构和实现步骤
- 整个demo依然是分为了三个部分:接口定义部分、服务器端、客户端
- 整个demo实现了传输流式数据和传输集合对象的结合使用
整个demo的实现步骤:
- 依然是在demo-proto模块中使用protobuf定义接口proto文件,使用build方法生成对应程序代码
- 在demo-server模块中重写传输方法
- 在demo-client中发送请求,获取返回数据
- 在浏览器中输出返回数据结果,并在浏览器中打印出来
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方法
代码如下所示:
客户端
- 客户端demo-client也没有添加什么新的依赖端口也没有进行更改,在接收的返回数据中没有使用JSON进行处理,所以配置文件就不再加以赘述
- 在demo-client客户端添加发送请求的方法,并且解析服务端返回的流式数据
方法具体代码如下:
注:在这里没有把返回的数据使用JSON进行处理,只是简单的把返回的数据转成字符串作为返回对象。
- 在控制器中使用RequestMapping注解添加访问发送请求的方法,并且获取浏览器URL中输入的参数内容
代码如下:
运行结果
分别启动客户端和服务端
服务端启动结果如图所示:
客户端启动结果如图所示:
demo最后运行结果如下所示:
本文整个demo的实现在上一篇文档的基础上完成的,如果有什么不明白的地方可参考上一篇文章gRPC----gRPC(springboot)传输简单数据