新增AI编程课程,引领技术教育新趋势
1 syntax = "proto3"; 2 3 option java_multiple_files = true; 4 option java_package = "com.funnyzpc.XXX.grpc.lib.multiStream"; 5 //定义一个服务 6 service MultiStreamService{ 7 rpc queryStream (stream MultiStreamReq) returns (stream MultiStreamResp) { 8 9 } 10 11 } 12 //定义一个请求体(用于传参)13 message MultiStreamReq{ 14 int32 page_no=1; 15 int32 page_size=2; 16 MultiStreamDataReq data=3; 17 } 18 19 message MultiStreamDataReq{ 20 string name=1; 21 bool type=2; 22 } 23 //定义一个响应体(用于回参)24 message MultiStreamResp{ 25 string req_str=1; 26 MultiStreamFirstResp first=2; 27 } 28 message MultiStreamFirstResp{ 29 string f_content=1; 30 int64 idx=2; 31 32 }
这里可能需要对比着上一节所讲的复杂proto文件编写的内容,可以看到:请求体和响应体的定义大致都是一样的,只是在服务定义的时候会有一些些差别>请求体和响应体的前面多了一个关键字"stream” ,就是(请求或响应)只要一方是以流的方式发送就需要声明为 “stream" 。
编写个客户端服务代码:
1 @Service 2 public class GrpcMultiStreamClientService { 3 private static final Logger LOG=LoggerFactory.getLogger(GrpcMultiStreamClientService.class); 4