开始食用grpc(之二)
https://www.cnblogs.com/funnyzpc/p/9570992.html
开始食用grpc(之一)
https://www.cnblogs.com/funnyzpc/p/9501353.html
https://grpc.io
https://github.com/grpc/grpc-java/tree/master/examples/example-tls
https://github.com/grpc/grpc-java
https://www.myssl.cn/tools/merge-pem-cert.html
双向流式调用方法及注意事项:
由于双向流的使用方式不用于上期所讲的,这里我从编写一步步讲。
先在preview-grpc-lib工程先的proto文件夹下编写一个包含双向流的是proto文件以生成客户端和服务器相关代码(记得把生成的代码放入工程内)。
(MultiStream.proto)
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