gRPC入门指南详解 - Go语言中文社区

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

依赖核心工程

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

  • generatedFilesBaseDir = "路径指定"
  • grpc -> setOutputSubDir "java" 指定grpc的sub生成路径
  • protobuf-gradle-plugin 是一个groovy语言开发
版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/69084d680154
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-02 14:23:06
  • 阅读 ( 1358 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢