• 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支持流式调用

     


     

    用自己的努力创造我们的未来
  • 相关阅读:
    linux 删除乱码文件
    snprintf用法
    面试时经常问到的非技术性问题
    vector查找元素
    new 和delete
    python安装
    UIPickerView详解
    设置文本框左边显示的View
    字符串的分割??
    VC++异常捕获??
  • 原文地址:https://www.cnblogs.com/yishilin/p/15513075.html
Copyright © 2020-2023  润新知