J'ai un client gRPC et un serveur. Lorsque je les lance, ils semblent fonctionner correctement, mais lorsque j'essaie de composer un serveur avec un client, une erreur se produit:
"Error": {
"code": 14,
"message": "all SubConns are in TransientFailure"
},
Aucune idée de quoi s'agit-il. J'ai essayé de trouver une solution avec Google, sans succès là-bas.
Des idées? Voici mon code serveur:
lis, err := net.Listen("tcp", fmt.Sprintf("%s:%d", cfg.Host, cfg.Port))
if err != nil {
logger.Critical(ctx, "failed to listen: %v", err)
} else {
logger.Info(ctx, "[userserver] running at %s:%d", cfg.Host, cfg.Port)
}
grpcServer := grpc.NewServer()
userServer := userserver.New()
pb.RegisterDomainServer(grpcServer, userServer)
rpcErr := grpcServer.Serve(lis)
if rpcErr != nil {
logger.Critical(ctx, "failed to serve: %v", rpcErr)
}
btw le serveur ici montre le journal:
2018/02/08 07: 03: 37.603287 INFO: [userserver] s'exécutant sur localhost: 3001
et client:
conn, err := grpc.Dial(c.serverAddr, grpc.WithInsecure())
if err != nil {
return err
}
defer conn.Close()
client := pb.NewDomainClient(conn)
_, err = client.Dispatch(ctx, &pb.Command{
Name: command,
Payload: payload,
})
et c'est le port buff
service Domain {
rpc Dispatch(Command) returns (Response);
}
message Command {
string name = 1;
bytes payload = 2;
}
message Response {}
Le serveur écoute-t-il ce port?
// Most linux
lsof -i :3001
// OSX
lsof -iTCP -sTCP:LISTEN -P
Connectez-vous le client à la bonne adresse?
c.serverAddr doit être "127.0.0.1:3001"
Cette erreur signifie que la connexion à votre serveur est interrompue pour une raison quelconque.
Vous êtes en train d'imprimer que votre serveur est exécuté sur localhost: 3001, mais ne vérifiez pas si le serveur a des erreurs de service sur cette adresse.
Remplacez votre dernière ligne du serveur par:
if err := grpcServer.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
De plus, d'où vient le contexte ctx
au démarrage du serveur?
Je suppose que votre définition de proto ressemble à cela - sinon, il pourrait y avoir d'autres problèmes:
package ...;
service Domain {
rpc Dispatch(Command) returns (...) {}
}
message Command {
... Name
... Payload
}