同時存取多個gRPC 服務
問題:
問題:<code class="go">func NewSubscriber() (c SubscriberRPC, err error) { c.conn, err = grpc.Dial("localhost:6000", grpc.WithInsecure()) if err != nil { log.Fatal(err) } c.client = pb.NewSubscriberServiceClient(c.conn) return } func NewDropper() (c DropperRPC, err error) { c.conn, err = grpc.Dial("localhost:6000", grpc.WithInsecure()) if err != nil { log.Fatal(err) } c.client = pb.NewDropperServiceClient(c.conn) return }</code>
在有多個類型RPC 服務的伺服器中在單一連接埠上可用,為什麼從客戶端撥號時需要為每個服務建立單獨的連線?
解決方案:<code class="go">func main() { cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure()) if err != nil { log.Fatal(err) } c1 := pb.NewSubscriberServiceClient(cc) c2 := pb.NewDropperServiceClient(cc) }</code>
與最初相反假設,可以透過單一連線存取同一伺服器上的多個 gRPC 服務。這可以透過建立一個 grpc.ClientConn 並將其傳遞給多個 pb.New*Client 函數來實現。
使用介面:<code class="go">type SubscriberDropper struct { pb.SubscriberServiceClient pb.DropperServiceClient } func main() { // ... as above ... sd := &SubscriberDropper{c1, c2} }</code>自訂客戶端使用 pb.go 檔案中提供的產生程式碼可以實現側面體驗。但是,產生的程式碼已經處理了所有必要的 RPC 功能。 為了方便起見,可以將多個服務組合到一個結構中:
以上是單一連線可以存取多個gRPC服務嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!