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

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM