GRPC

主题:GRPC的使用

 


HTTP2.0

 

    • 二进制传输
    • 头部压缩
    • 多路复用
    • 服务端推送

 


GRPC的概述

 

 

  • 安全认证:ALTS [ Application Layer Transport Security 应用层传输安全 ]
  • 传输协议:HTTP2

 


 

使用流程

定义一个服务

syntax = "proto3";

option java_package = "io.grpc.examples";

// The greeter service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}
  • 四种接口方式
    • 单项 RPC,即客户端发送一个请求给服务端,从服务端获取一个应答,就像一次普通的函数调用。
rpc SayHello(HelloRequest) returns (HelloResponse){}
    • 服务端流式 RPC,即客户端发送一个请求给服务端,可获取一个数据流用来读取一系列消息。客户端从返回的数据流里一直读取直到没有更多消息为止。
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse){}
    • 客户端流式 RPC,即客户端用提供的一个数据流写入并发送一系列消息给服务端。一旦客户端完成消息写入,就等待服务端读取这些消息并返回应答。
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse) {}
    • 双向流式 RPC,即两边都可以分别通过一个读写数据流来发送一系列消息。这两个数据流操作是相互独立的,所以客户端和服务端能按其希望的任意顺序读写,例如:服务端可以在写应答前等待所有的客户端消息,或者它可以先读一个消息再写一个消息,或者是读写相结合的其他方式。每个数据流里消息的顺序会被保持。
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse){}
  • 支持的数据类型

生成代码

服务端

  • 服务端接口实现
    • 实现预定义的接口
  • 启动服务端
    • ServerBuilder

客户端

  • 创建通道Channel
    • ManagedChannelBuilder
  • 创建存根stub
    • 阻塞/同步 : RPC 调用等待服务器响应,并且要么返回应答,要么造成异常
    • 非阻塞/异步 : 存根可以向服务器发起非阻塞调用,应答会异步返回。可以使用异步存根去发起特定类型的流式调用。
  • 调用方法

 

 


 

其他RPC框架的对比

Dubbo

  • 侧重重服务治理,主要的精力放在服务发现、路由、容错处理等方面
  • Dubbo3.0 的协议基于 gRPC(http2.0), 功能增强

Thrift

  • 侧重跨语言调用,能够支持大部分的语言进行语言无关的调用(同GRPC)
    • 社区活跃度 GRPC>Thrift
    • 文档详细完善 GRPC>Thrift
    • 特性丰富度 Thrift>GRPC
    • Thrift的协议层和传输层可拓展性强
    • GRPC支持流式调用

 


 

posted on 2021-11-05 14:17  梦林``ysl  阅读(301)  评论(0编辑  收藏  举报

导航