RPC 和 HTTP 的关系
基于 HTTP 的远程调用方案和 RPC 的相同点、不同点
RPC 执行流程:调用方和被调用方
- Stub (桩代码)指满足形式要求但没有实现实际功能的占位或代理代码
- RPC 中的桩代码负责远程请求或响应
.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;}
}
.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);
}