項目地址:grpc-modesgit
最近使用 gRPC 入門微服務開發,特此總結了 gRPC 中 4 種運行模式github
$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
,它只有一個 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()
函數中模擬了一個數據庫,存儲用戶的姓名和年齡:ide
// 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,查詢後將用戶信息做爲響應返回。函數
客戶端發起一個請求到服務端,服務端返回一個響應。微服務
client 請求 ID 爲 2 的用戶數據,server 返回 ID 爲 2 的用戶數據:學習
客戶端發起一個請求到服務端,服務端返回一段連續的數據流響應。spa
client 請求 1 的用戶數據,server 返回 一、二、3 的用戶數據流:code
客戶端將一段連續的數據流發送到服務端,服務端返回一個響應。server
client 請求 一、二、3 的用戶數據流,server 返回 3 的用戶數據:
客戶端將連續的數據流發送到服務端,服務端返回交互的數據流。
client 依次請求 一、二、3 的用戶數據流,服務端依次返回 一、二、3 的用戶數據流:
最近在系統的學習 Golang 的微服務,從 gRPC 開始,到 go-micro、Docker 化微服務等,每週更新。歡迎關注個人博客 wuYinBlog
但願本項目對你有所幫助 ☺️