Einführung:
gRPC ermöglicht Clients die Kommunikation mit mehreren bereitgestellten Diensten ein einzelner Server. Allerdings wird häufig davon ausgegangen, dass jeder Dienst eine dedizierte Clientverbindung erfordert. In diesem Artikel wird erläutert, wie Sie eine einzelne Verbindung verwenden, um auf mehrere gRPC-Dienste zuzugreifen.
Einen einzelnen Socket anwählen:
Obwohl separate Serviceschnittstellen vorhanden sind, ist es nicht erforderlich, einen einzelnen Socket einzurichten Verbindungen für jeden Dienst. Stattdessen können Sie eine einzelne grpc.ClientConn erstellen. Diese Verbindung kann dann an alle Service-Clients übergeben werden, die mithilfe der New*Client()-Funktionen instanziiert wurden. Durch die gemeinsame Nutzung einer Verbindung nutzen diese Clients dieselben zugrunde liegenden Transport- und Multiplexmechanismen.
<code class="go">cc, err := grpc.Dial("localhost:6000", grpc.WithInsecure()) if err != nil { log.Fatal(err) }</code>
Verwendung einer Schnittstelle:
Obwohl die Erstellung separater Strukturen für jeden Dienst den Client vereinfacht Interaktionen fördert es die Codeduplizierung. Um dies zu reduzieren, kann eine Schnittstelle wie ServiceClient definiert und von allen Service-Clients implementiert werden. Dies ermöglicht die gemeinsame Nutzung gemeinsamer Eigenschaften und Methoden und reduziert so die Code-Unordnung.
<code class="go">type ServiceClient interface { // Common methods and properties } type SubscriberClient struct { pb.SubscriberServiceClient } type DropperClient struct { pb.DropperServiceClient }</code>
Beseitigung von Bibliotheksabhängigkeiten:
Während Bibliotheken wie cmux Lösungen für die gemeinsame Nutzung von Verbindungen bieten, ist dies der Fall Dies ist ohne externe Abhängigkeiten möglich. Der grpc.ClientConn bietet direkten Zugriff auf den zugrunde liegenden Transport und ermöglicht die Erstellung mehrerer Service-Clients.
<code class="go">func NewServiceClient(conn *grpc.ClientConn, service interface{}) interface{} { switch service { case pb.SubscriberServiceServer: return pb.NewSubscriberServiceClient(conn) case pb.DropperServiceServer: return pb.NewDropperServiceClient(conn) } panic("Unknown service") }</code>
Wichtige Erkenntnisse:
Das obige ist der detaillierte Inhalt vonWie kann 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!