gRPC

gRPC是Google开源的一个RPC框架,基于HTTP2.0传输数据,数据序列化框架为Google开源的Protocol Buffers

一、先简单介绍下Protocol Buffers

同样作为数据序列化框架,Protocol Buffers比XML更小、更快、更易于编程,它将消息和服务定义在.proto文件中,语言无关,在Java中用它自己的编译器将.proto文件直接编译成Java类

1.定义消息
syntax = "proto3";

message SearchRequest {
  required string query = 1;
  optional int32 page_number = 2;
  optional int32 result_per_page = 3;
}

指定元素类型:可以指定元素类型为基本类型,也可以指定为enum或者其他message

指定元素代号:在二进制格式的消息中标识元素,是从1开始的数字

指定元素约束:默认情况下元素可以出现0次或1次;repeated:元素可以出现任意次

添加注释:与Java注释相同,//或者/* ……*/

添加reserved元素:弃用某些元素名或元素代号

message Foo {
  reserved 2, 15, 9 to 11;
  reserved "foo", "bar";
}

元素基本类型和Java类型的对应关系:double->double, float->float, int32->int, int64->long, bool->boolean, string->String, bytes->BytesString

枚举类型:

message SearchRequest {
  required string query = 1;
  optional int32 page_number = 2;
  optional int32 result_per_page = 3 [default = 10];
  enum Corpus {
    //option allow_alias = true;
    //OTHER = 6;    allow_alias为true可以指定不同枚举元素为相同的值
    UNIVERSAL = 0;
    WEB = 1;
    IMAGES = 2;
    LOCAL = 3;
    NEWS = 4;
    PRODUCTS = 5;
    VIDEO = 6;
  }
  Corpus corpus = 4;
}

注意枚举类型的元素代码从0开始,枚举元素也可以弃用某些元素名或元素代码

enum Foo {
  reserved 2, 15, 9 to 11, 40 to max;
  reserved "FOO", "BAR";
}

默认值:string->empty string, bytes->empty bytes, numeric->0, bool->false, enum->第一个枚举元素

导入其他消息定义:使用public关键字可以传递导入

// old.proto
import public "new.proto";
import "other.proto";
// client.proto
import "old.proto";
// You use definitions from old.proto and new.proto, but not other.proto

消息可以嵌套定义

message SearchResponse {
  message Result {
    string url = 1;
    string title = 2;
    repeated string snippets = 3;
  }
  repeated Result results = 1;
}
2.定义服务
service SearchService {
  rpc Search (SearchRequest) returns (SearchResponse);
}

二、从实例出发了解gRPC

gRPC的使用流程是这样的:
1.在.proto文件中定义消息体和服务,规定客户端要发送的消息和服务器的通信方式
2.编译.proto文件,生成Java类
3.编写Server和Client端程序,定义通信方法
4.运行服务器程序,监听请求
5.运行客户端程序,发送请求消息,接收返回消息

Protocol Buffers和gRPC都需要自己的编译器,先添加maven依赖

<properties>
    <grpc.version>1.13.1</grpc.version>
    <protobuf.version>3.5.1</protobuf.version>
    <protoc.version>3.5.1-1</protoc.version>
</properties>

<dependencies>
    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty</artifactId>
        <version>${grpc.version}</version>
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值