Maison >développement back-end >Golang >Puis-je accéder à plusieurs services gRPC avec une seule connexion ?
Accéder simultanément à plusieurs services gRPC
Problème :
Dans un serveur avec plusieurs services gRPC disponible sur un seul port, pourquoi est-il nécessaire d'établir des connexions distinctes pour chaque service lors de la numérotation depuis le client ?
<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>
Résolution :
Contrairement à l'initiale En supposant que plusieurs services gRPC sur le même serveur soient accessibles avec une seule connexion. Ceci peut être réalisé en créant un grpc.ClientConn et en le transmettant à plusieurs fonctions pb.New*Client.
<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>
Utilisation d'une interface :
Personnalisation du client -l'expérience côté est possible en utilisant le code généré fourni dans le fichier pb.go. Cependant, le code généré gère déjà toutes les fonctionnalités RPC nécessaires.
Pour plus de commodité, plusieurs services peuvent être combinés en une seule structure :
<code class="go">type SubscriberDropper struct { pb.SubscriberServiceClient pb.DropperServiceClient } func main() { // ... as above ... sd := &SubscriberDropper{c1, c2} }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!