Heim > Artikel > Backend-Entwicklung > Kann ich mit einer einzigen Verbindung auf mehrere gRPC-Dienste zugreifen?
Gleichzeitiger Zugriff auf mehrere gRPC-Dienste
Problem:
Auf einem Server mit mehreren gRPC-Diensten an einem einzigen Port verfügbar, warum ist es notwendig, beim Wählen vom Client aus für jeden Dienst separate Verbindungen herzustellen?
<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>
Lösung:
Im Gegensatz zum Original Annahme, dass mit einer einzigen Verbindung auf mehrere gRPC-Dienste auf demselben Server zugegriffen werden kann. Dies kann erreicht werden, indem eine grpc.ClientConn erstellt und an mehrere pb.New*Client-Funktionen übergeben wird.
<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>
Verwenden einer Schnittstelle:
Anpassen des Clients -Side-Erfahrung ist mit dem generierten Code möglich, der in der pb.go-Datei bereitgestellt wird. Der generierte Code übernimmt jedoch bereits alle notwendigen RPC-Funktionen.
Der Einfachheit halber können mehrere Dienste in einer einzigen Struktur kombiniert werden:
<code class="go">type SubscriberDropper struct { pb.SubscriberServiceClient pb.DropperServiceClient } func main() { // ... as above ... sd := &SubscriberDropper{c1, c2} }</code>
Das obige ist der detaillierte Inhalt vonKann ich mit einer einzigen Verbindung auf mehrere gRPC-Dienste zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!