這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
項目地址:grpc-modes
最近使用 gRPC 入門微服務開發,特此總結了 gRPC 中 4 種運行模式
目錄結構
$GOPATH└── grpc ├── simple // 簡單模式 RPC │ ├── client │ │ └── client.go # 用戶端代碼 │ ├── proto │ │ ├── user.pb.go │ │ └── user.proto # 通訊的 protobuf 協議 │ └── server │ └── server.go # 服務端代碼 ├── server-side-streaming // 服務端流式 RPC ├── client-side-streaming // 用戶端流式 RPC └── bidirectional-streaming // 用戶端與服務端雙向流式 RPC
UserService 微服務
本項目中定義了一個微服務:UserService
,它只有一個 RPC:GetUserInfo()
syntax = "proto3";package grpc.simple;// 定義 UserService 微服務service UserService { // 微服務中擷取使用者資訊的 RPC 函數 rpc GetUserInfo (UserRequest) returns (UserResponse);}// 用戶端請求的格式message UserRequest { int32 ID = 1;}// 服務端響應的格式message UserResponse { string name = 1; int32 age = 2;}
在 GetUserInfo()
函數中類比了一個資料庫,儲存使用者的姓名和年齡:
// ID 為 key,使用者資訊為 value 類比資料庫查詢結果var users = map[int32]pb.UserResponse{ 1: {Name: "Dennis MacAlistair Ritchie", Age: 70}, 2: {Name: "Ken Thompson", Age: 75}, 3: {Name: "Rob Pike", Age: 62},}
用戶端請求帶上 ID,查詢後將使用者資訊作為響應返回。
用戶端與服務端進行資料互動的四種模式
simpe 簡單模式 RPC
用戶端發起一個請求到服務端,服務端返回一個響應。
client 請求 ID 為 2 的使用者資料,server 返回 ID 為 2 的使用者資料:
server-side streaming 服務端流式 RPC
用戶端發起一個請求到服務端,服務端返回一段連續的資料流響應。
client 請求 1 的使用者資料,server 返回 1、2、3 的使用者資料流:
client-side streaming 用戶端流式 RPC
用戶端將一段連續的資料流發送到服務端,服務端返回一個響應。
client 請求 1、2、3 的使用者資料流,server 返回 3 的使用者資料:
Bidirectional streaming 雙向資料流模式的 gRPC
用戶端將連續的資料流發送到服務端,服務端返回互動的資料流。
client 依次請求 1、2、3 的使用者資料流,服務端依次返回 1、2、3 的使用者資料流:
最後
最近在系統的學習 Golang 的微服務,從 gRPC 開始,到 go-micro、Docker 化微服務等,每周更新。歡迎關注我的部落格 wuYinBlog
希望本項目對你有所協助 ️