ข้ามไปยังเนื้อหา

Building Services

คุณมี .proto contract แล้ว โมดูลนี้จะเปลี่ยน contract นั้นให้เป็นของที่รันได้จริง: server ที่ตอบ call, client ที่ยิง call และวินัยเรื่อง deadline ที่กันไม่ให้ทั้งระบบค้างไปตลอดกาล

ทุกบทเรียนใช้ contract เล็ก ๆ ตัวเดียวกัน เพื่อให้คุณตามตัวอย่างเดียวได้ตั้งแต่ต้นจนจบ:

syntax = "proto3";
package user.v1;
message GetUserRequest {
int64 id = 1;
}
message User {
int64 id = 1;
string name = 2;
string email = 3;
}
service UserService {
rpc GetUser(GetUserRequest) returns (User);
}
บทเรียนสิ่งที่คุณจะได้เรียนรู้
Code Generationprotoc, plugin ของแต่ละภาษา, buf และสิ่งที่ generate ออกมาจริง ๆ
Implementing a Serverเติม handler, register service และ serve
Writing a Clientchannel, stub, การยิง call และการ reuse connection
Deadlines & Cancellationทำไมทุก call ต้องมี deadline และส่งต่อกันอย่างไร
flowchart LR
  proto[".proto"] -->|protoc / buf| gen["generated code:
messages + stub + server interface"]
  gen --> srv["implement server
(fill GetUser)"]
  gen --> cli["write client
(call GetUser)"]
  cli -->|HTTP/2| srv
วงจรการ build: generate, implement, call

สังเกตว่า generated code อยู่ตรงกลาง: ยื่น interface ให้ server ไป implement และยื่น stub ให้ client ไปเรียก คุณเขียนสองฝั่ง ส่วน codegen รับประกันว่าทั้งสองฝั่งตรงกัน

code ที่ generate จาก .proto ให้อะไรกับคุณบ้าง?
ทำไมทุกบทเรียนในโมดูลนี้ถึง reuse contract UserService ตัวเดียวกัน?
วินัยข้อไหนที่กันไม่ให้ gRPC call ค้างไปตลอดกาล?