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语言开发
网友评论