后端学习 -gRPC
创始人
2024-02-29 13:20:56
0

gRPC

何为 RPC

  • RPC 和 HTTP 的关系

    1. 基于 HTTP 的远程调用方案(包含了接口规范、序列化反序列化等)和 RPC 是并列的
    2. 单从 HTTP 协议来看,RPC 可以使用 HTTP 作为通信协议
      在这里插入图片描述
  • 基于 HTTP 的远程调用方案和 RPC 的相同点、不同点

    • 相同点
      1. 都可以实现远程调用(上图的顶端节点)
    • 不同点
      1. 基于 HTTP RESTful 的远程调用可读性更好
      2. RPC 可以针对场景选用不同的框架(如 Dubbo、gRPC 等),不同的通信协议(HTTP、TCP、UDP),以及不同的序列化方式(JSON、PB 等),效率更高
  • RPC 执行流程:调用方和被调用方

  1. Client 调用以本地调用方式调用服务;
  2. Client Stub 接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体(桩代码是未实现的接口,此处使用动态代理);
  3. Client Stub 找到服务地址,并将消息发送到服务端;
  4. Server Stub 收到消息后进行解码;
  5. Server Stub 根据解码结果调用本地的服务;
  6. 本地服务执行并将结果返回给 Server Stub;
  7. Server Stub 将返回结果打包成消息并发送至消费方;
  8. Client Stub 接收到消息,并进行解码;
  9. Client 得到最终结果
  • Stub (桩代码)指满足形式要求但没有实现实际功能的占位或代理代码
  • RPC 中的桩代码负责远程请求或响应

ProtocolBuffer

  • PB 是一种语言无关、平台无关、可扩展的序列化结构数据的接口描述语言(Interface Description Language, IDL),可用于通信协议、数据存储等
  1. 编写 .proto 文件,假设场景是根据地址,查询地址对应的联系方式,以及该号码是否活跃
syntax = "proto3"  // 语法版本package com.hit.demo;service PhoneLookup {rpc QueryPhoneByAddress (Request) returns (Response) {}
}message Requset {required string id = 1;  // required:必须传入1个参数optional string name = 2;  // optional:可以传入0或1个参数,如果不传入则为默认0值repeated string address = 3;  // repeated:可以传入0或多个参数
}message Response {string id = 1;ResultCode result = 2 [default = SUCCESS];  // 声明默认值repeated int64 number = 3;repeated bool active = 4;enum ResultCode {SUCCESS = 0;FAIL = 1;UNKNOWN = 3;}
}
  1. 编译 .proto 文件得到桩代码,此时在文件中声明的类已可用,并支持序列化、反序列化
public static void main(String[] args) {// 构造查询请求Request req0 = Request.newBuilder().setId("Request01").setName("dino").setAddress(Collections.singletonList("hita08")).build();// 序列化byte[] reqBytes = req.toByteArray();// 反序列化Request req1 = Request.parseFrom(reqBytes);
}
  1. Client 和 Server 使用编译生成的桩代码,分别实现业务逻辑

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...