In Szenarien, in denen sich mehrere gRPC-Dienste auf demselben Server befinden und eine gemeinsame Adresse abhören, wie im bereitgestellten Beispiel, ist dies der Fall Es mag überflüssig erscheinen, separate Verbindungen zu jedem Dienst herzustellen. In diesem Artikel soll erläutert werden, warum in der Regel unterschiedliche Verbindungen erforderlich sind, und es wird erläutert, wie eine einzelne Verbindung für den Zugriff auf mehrere gRPC-Dienste genutzt werden kann.
Um effektiv auf verschiedene gehostete gRPC-Dienste zuzugreifen Auf demselben Server können Sie eine einzelne gRPC-Clientverbindung nutzen. Bei diesem Ansatz wird ein grpc.ClientConn-Objekt initialisiert und an einzelne Service-Client-Fabriken übergeben, sodass diese dieselbe(n) zugrunde liegende(n) Verbindung(en) gemeinsam nutzen können.
func main() { cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure()) if err != nil { log.Fatal(err) } c1 := pb.NewSubscriberServiceClient(cc) c2 := pb.NewDropperServiceClient(cc) }
Der in der pb.go-Datei bereitgestellte generierte gRPC-Code umfasst alle notwendigen Funktionen zum Ausführen von RPCs. Daher sind keine zusätzlichen clientseitigen Implementierungen erforderlich, es sei denn, bei jedem Aufruf muss automatisch eine bestimmte Logik ausgeführt werden.
Für Fälle, in denen Dienste unterschiedlich sind Methodennamen verwenden, können Sie sie für zusätzlichen Komfort in einer einzigen Struktur zusammenführen.
type SubscriberDropper struct { pb.SubscriberServiceClient pb.DropperServiceClient } func main() { // ... as above ... sd := &SubscriberDropper{c1, c2} }
Durch die Verwendung dieses Ansatzes können Sie redundante Verbindungsaufbauten eliminieren, was zu einer effizienteren und optimierten clientseitigen Implementierung für Ihren gRPC führt Anwendungen.
Das obige ist der detaillierte Inhalt vonKann ich über eine einzige Verbindung auf mehrere gRPC-Dienste zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!