gRPC入门指南详解

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的依赖核心工程

gRPC入门指南详解_第1张图片
依赖核心工程

12、解决gradle编译多个文件重复问题

  • generatedFilesBaseDir = "路径指定"
  • grpc -> setOutputSubDir "java" 指定grpc的sub生成路径
  • protobuf-gradle-plugin 是一个groovy语言开发

你可能感兴趣的:(gRPC入门指南详解)