web-dev-qa-db-fra.com

Comment configurer correctement le client - serveur gRPC

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 {}
5
Vardius

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"

0
Tommaso Barbugli

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    
}
0
Kevin Busse