跳到內容

gRPC

gRPC 是 Gortexa 的原生協議。外部連線走同一個 h2c port,由 mux 依 Content-Type: application/grpc 分派給 grpc-go 的 ServeHTTP 處理模式。

服務定義在 proto。內建的 sample resource:

service ResourceService {
rpc CreateResource(CreateResourceRequest) returns (Resource);
rpc GetResource(GetResourceRequest) returns (Resource);
rpc ListResources(ListResourcesRequest) returns (ListResourcesResponse);
rpc UpdateResource(UpdateResourceRequest) returns (Resource);
rpc DeleteResource(DeleteResourceRequest) returns (google.protobuf.Empty);
}

gortexa regen 把 stubs 產到 gen/,logic 實作放在 internal package,兩者不混。

本機測試若要用 grpcurl,先開 reflection(預設關閉):

Terminal window
GORTEXA_SERVER__REFLECTION=true gortexa run
Terminal window
grpcurl -plaintext \
-H 'authorization: Bearer <token>' \
-d '{"id":"x"}' \
localhost:8080 resource.v1.ResourceService/GetResource

沒帶 token 會得到 UNAUTHENTICATED:auth 對三個協議一視同仁。

三態健康狀態對應到標準 gRPC Health protocol。用 app.Health().Register(...) 註冊真實依賴檢查,/readyz 與 gRPC Health 才會反映 DB、cache、MQ 的實際可達性。每個 check 有 5 秒逾時,慢的依賴不會卡住整個 health 查詢。

gRPC reflection 預設關閉,需要時以 config 或環境變數開啟:

Terminal window
GORTEXA_SERVER__REFLECTION=true

生產環境建議保持關閉,理由見部署