1、gRPC 官方与简要
GitHub
gRPC是一个现代的,开源的,高性能的远程过程调用(RPC)框架,可以在任何地方运行,gRPC使客户端和服务器应用程序能够透明地进行通信,并简化了连接系统的构建。
2、gRPC 的特征
grpc 生成的服务端和客户端都统称stub
gRPC是一个可伸缩的框架(scale)
实现双向的流(Bi-directional streaming) *重点和难点
容易构建分布式(distributed)应用和服务
protocol buffer versions proto3 在grpc建议使用
payload 负载
proto的rpc关键字
stream 独立的流(read 、write)
grpc提供了一个插件
gRPC是基于http2协议去实现rpc通信
blocking 是同步阻塞
3、gRPC 的语法
java_multiple_files 支持生成多个文件
repeated 重复关键字(封装list)
4、gRPC 基于3种传输实现
netty
okHttp(Android)
InProcess 进程
5、gRPC 生明周期
gRPC 生明周期其实就是解析四种stream的工作原理
6、gradlew与gradle使用
gradlew 是由gradle wrapper 包装器构成
gradlew 在本地没有gradle也可以构建项目,它会自动下载gradle
gradlew wrapper –gradle -version 3.5 命令使用
gradle generate proto build 编译proto3文件
gradle clean generate proto 清除文件
gradle clean build -x test 清除且编译不包括test文件
7、StreamObserver 流观察者
StreamObserver 只要客户端以流形式向服务端发送请求,那么这种请求都是异步 (GRPC规范行为)
8、 JVM回调钩子
Runtime.getRuntime().addshutdownHook JVM回调钩子,对接收程序收尾的工作(释放资源)异步
Runtime JVM 不允许实例化这个类,只能通过getRuntime获取,由于Runtime是私有(private)
private Server server;
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
//关闭server
this.stop();
}));
//关闭grpc的Server
private void stop() {
if(null != this.server) {
this.server.shutdown();
}
}
9、什么时候回调用addshutdownHook
1、程序正常退出或非线程退出
2、虚拟机在响应用户的中断,如:ctrl + C或操作系统的中断或宕机
3、当虚拟机开始将要序列化关闭所有注册停止
4、一旦序列开始终止会通过halt方法
5、不同服务调用可能存在死锁(不建议在钩子里面处理过长时间的业务逻辑)
10、gRPC 要点
grpc 比较重要,比thrift偏难入手,grpc是protobuf的升级版,将来可能会广泛使用,它基于http2协议实现
11、grpc的依赖核心工程
依赖核心工程
12、解决gradle编译多个文件重复问题
generatedFilesBaseDir = “路径指定”
grpc -> setOutputSubDir “java” 指定grpc的sub生成路径
protobuf-gradle-plugin 是一个groovy语言开发
作者:寅务