在多個gRPC 服務駐留在同一伺服器上偵聽共用位址的情況下(如提供的範例中所示),與每個服務建立單獨的連線似乎是多餘的。本文旨在解決為什麼通常需要不同的連接,並探討如何利用單一連接來存取多個 gRPC 服務。
有效存取託管的各種 gRPC 服務在同一伺服器上,您可以利用單一 gRPC 用戶端連線。此方法涉及初始化 grpc.ClientConn 物件並將其傳遞給各個服務客戶端工廠,使它們能夠共享相同的底層連線。
func main() { cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure()) if err != nil { log.Fatal(err) } c1 := pb.NewSubscriberServiceClient(cc) c2 := pb.NewDropperServiceClient(cc) }
pb.go 檔案中提供的產生的 gRPC 程式碼包含執行 RPC 所需的所有功能。因此,不需要額外的客戶端實現,除非需要在每次呼叫期間自動執行特定邏輯。
對於服務具有不同功能的情況方法名稱,您可以將它們合併到一個結構中以增加方便。
type SubscriberDropper struct { pb.SubscriberServiceClient pb.DropperServiceClient } func main() { // ... as above ... sd := &SubscriberDropper{c1, c2} }
透過利用此方法,您可以消除冗餘連接機構,從而為您的 gRPC 應用程式提供更有效率、更優化的用戶端實作。
以上是是否可以透過單一連線存取多個gRPC服務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!