首頁  >  文章  >  後端開發  >  單一連線可以存取多個gRPC服務嗎?

單一連線可以存取多個gRPC服務嗎?

Susan Sarandon
Susan Sarandon原創
2024-11-03 03:42:31159瀏覽

Can I Access Multiple gRPC Services with a Single Connection?

同時存取多個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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn