最近项目需要使用到gRPC来发送服务请求,网上也找了很久,都是一些maven的项目,依赖的jar包版本也不一致,导致前期耗费过多时间,现在特将一些搭建心得写下来,供以后使用。gRPC原理网上链接很多,在此不进行述说。因使用的是Java版本,主要以Java为主,其他语言可参考官网。
1、依赖链接
protoc-gen-grpc-java链接https://repo.maven.apache.org/maven2/io/grpc/protoc-gen-grpc-java/
protoc链接https://github.com/protocolbuffers/protobuf/releases
官网例子https://github.com/grpc/grpc-java/tree/master/examples
本次示例代码https://github.com/hhwode/PersonRPC
2、编写proto文件
只简单定义了请求响应结构与服务接口
3、编译proto文件
下载protoc-3.9.0-win64.zip,protoc-gen-grpc-java-1.23.0-windows-x86_64.exe(版本选择依据gRPC版本进行,此次示例使用gRPC-1.23.0版)
将protoc解压后,放成如下
通过命令生成消息结构体:./protoc --java_out=./ *.proto
通过命令生成服务接口: ./protoc --plugin=protoc-gen-grpc-java=protoc-gen-grpc-java-1.23.0-windows-x86_64.exe --grpc-java_out=./ *.proto
会生成如下几个文件:
4、新建工程
新建java工程,将编译proto生成的文件放入src对应包路径下,与proto设置一致最好,并新建一些自己需要处理的逻辑代码,我最终的结构如下
将依赖的第三方包放入lib文件夹下,下载路径链接: https://pan.baidu.com/s/17T3TB7Ikt0f_HlkxmaBsVA 提取码: hzjb
代码中最主要的是对proto定义的服务接口的实现,我的实现如下
通过将类对象进行序列化后传输给服务端解析,此处做了较复杂的操作,其实也跟传string一样。
客户端代码可参考官网https://github.com/grpc/grpc-java/tree/master/examples/src/main/java/io/grpc/examples/helloworld
执行服务端与客户端成功:
客户端:
服务端:
5、maven如何将需要的包下载到指定lib文件夹下
使用gRPC的过程主要是jar依赖版本不知道如何查找,这里我们可以通过新建一个maven工程,与grpc-java介绍一致设置
并配置maven下载jar包到指定位置,如本地lib下
完整的pom.xml配置可到https://github.com/hhwode/PersonRPC
在终端,pom.xml文件路径下,输入:mvn install
输出如下信息即下载jar包完成,可到配置的./lib目录下查看。
6、总结
总体而言,官网是最好的教程。
第一次码字,考虑还是不全面。