gRPC-Java总结(一)

1.gRPC简介

  • gRPC是由google开源的一个高性能的RPC框架。是由Stubby Google内部的RPC演化而来的,在2015正式开源。云原生时代是一个RPC标准。
  • gRPC核心的设计思路
    1. 网络通信--->gRPC自己封装网络通信的部分,提供多种语言的网络通信的封装(C Java[Netty] GO)
    2. 协议--->采用HTTP2 传输数据,二进制数据内容。支持双向流(双工)连接的多路复用。
    3. 序列化--->protobuf (Protocol Buffers) google开源一种序列化方式,时间效率和空间效率是JSON的3---5倍。IDL语言
    4. 代理的创建---> 让调用者像调用本地方法那样 去调用远端的服务方法。stub
  • gRPC的优势
    1. 网络通信协议为HTTP2,优于HTTP1.x
    2. gRPC大厂背书(Google),云原生时代 与其他组件合作的顺利。所以gRPC应用更广泛。
  • gRPC的好处
    1. 高效的进行进程间通信。
    2. 支持多种语言,原生支持C、Go、Java实现。C语言版本上扩展 C++ C# NodeJS Python Ruby PHP..
    3. 支持多平台运行 Linux Android IOS MacOS Windows。
    4. gRPC序列化方式采用protobuf,效率高。

2.Http2.0协议

2.1回顾Http1.x协议

  • HTTP1.0协议:请求响应的模式、短连接协议(无状态协议),即请求一次就结束,无状态不能保证用户认证,浏览器用session和cookie来解决。传输数据为文本结构、单工,无法实现服务端主动向客户端推送,变相实现推动的方式:(客户端轮训的方式)。
  • Http1.1协议:请求响应的模式,有限的长连接,升级的方式WebSocket、双工,实现服务器向客户端推送。
  • 总结Http1.x协议共性:
    • 传输数据文本格式,可读性好的但是效率差。
    • 本质上Http1.x协议无法实现双工通信。
    • 资源的请求。需要发送多次请求,建立多个连接才可以完成。例如HTML、js、css分多次请求

  • HTTP2.0协议
    • HTTP2.0协议是一个二进制协议,效率高于Http1.x协议,可读性差。
    • 可以实现双工通信。
    • 一个请求 一个连接 可以请求多个数据。【多路复用】
  •  HTTP2.0协议的三个概念
    • 数据流 stream
    • 消息 message
    • 帧 frame

 3.Protocol Buffers [protobuf]

  1.  protobuf是一种与编程语言无关【IDL】,与具体的平台无关【OS】。他定义的中间语言,可以方便的在client 于 server中进行RPC的数据传输。
  2. protobuf 两种版本 proto2 proto3,但是目前主流应用的都是proto3。
  3. protobuf主要安装protobuf的编译器,编译器目的,可以把protobuf的IDL语言,转换成具体某一种开发语言。
3.1protobuf编译器的安装 

https://github.com/protocolbuffers/protobuf/releases

 windows版本

  1. 直接解压缩,放在一个特定的目录之下
  2. 直接配置环境变量path
3.2protobuf IDEA插件
  1. 2021.2版本后面的新版本 IDEA内置了Protobuf插件
  2. 之前版本 可以选装第三方Protobuf插件
  3. 二者不能共存
3.3protobuf的语法详解 
  • 文件格式
 .proto
  
  UserService.proto
  OrderService.proto
  •  版本设定
  syntax = "proto3";
  • 与Java语言相关的语法
#后续protobuf生成的java代码 一个源文件还是多个源文件  xx.java
  option java_multiple_files = false; 
  
  #指定protobuf生成的类 放置在哪个包中
  option java_package = "com.suns";
  
  #指定的protobuf生成的外部类的名字(管理内部类【内部类才是真正开发使用】)
  option java_outer_classname = "UserServce";
  •  protobuf与Java对应的基本类型

  •  枚举类型 
enum SEASON{
     SPRING = 0;
     SUMMER = 1;
  
  }

 枚举的值,必须是0开始

  • 消息 message
message LoginRequest {
     string username = 1;
     singular string password = 2;
     int32  age = 3;
  }

 编号从1开始 到2^29-1 注意:19000 - 19999 不能用这个区间内的编号,因为他是protobuf自己保留的。

singular : 这个字段的值 只能是0个或1个 (默认关键字)

repeated

  message Result{
     string content = 1;
     repeated string stutas = 2; //这个字段 返回值 是多个 等价于 Java List Protobuf getStatusList()-->List
  }
 protobuf [grpc]
  可以定义多个消息 
  
  message LoginRequest{
    ....
  }
  
  message LoginResponse{
    ...
  }
  
  消息可以嵌套 
  message SearchResponse{
     message Result{
        string url = 1;
        string title = 2;
     }
  
    string xxx = 1;
    int32  yyy = 2;
    Result ppp = 3;
  }
  
  SearchResponse.Result
  
  message AAA{
    string xxx = 1;
    SearchResponse.Result yyy = 2;
  }
  
  oneof [其中一个]
  message SimpleMessage{
     oneof test_oneof{
        string name = 1;
        int32  age = 2;
     }
     
     test_oneof xxx
  }
  • 服务
 service HelloService{
     rpc hello(HelloRequest) returns(HelloResponse){}
  }
  # 里面是可以定义多个服务方法。
  # 定义多个服务接口
  # gPRC 服务 4个服务方式 。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值