wake-up-neo.com

So richten Sie den gRPC-Client - Server korrekt ein

Ich habe einen gRPC Client und einen Server. Wenn ich sie starte, scheinen sie in Ordnung zu sein, aber wenn ich versuche, einen Server mit einem Client zu wählen, erhalte ich eine Fehlermeldung:

"Error": {
    "code": 14,
    "message": "all SubConns are in TransientFailure"
},

Keine Ahnung was es ist. Ich habe versucht, eine Lösung mit Google zu finden, dort kein Erfolg.

Irgendwelche Ideen? Hier ist mein Servercode:

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)
}

Übrigens zeigt der Server hier log:

2018/02/08 07: 03: 37.603287 INFO: [userserver] wird auf localhost: 3001 ausgeführt

und Kunde:

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,
})

und das ist Port Buff

service Domain {
  rpc Dispatch(Command) returns (Response);
}

message Command {
  string name = 1;
  bytes payload = 2;
}

message Response {}
5
Vardius

Empfängt der Server diesen Port?

// Most linux 
lsof -i :3001

// OSX
lsof -iTCP -sTCP:LISTEN -P

Verbinden Sie den Client mit der richtigen Adresse?

c.serverAddr sollte "127.0.0.1:3001" sein

0

Dieser Fehler bedeutet, dass die Verbindung zu Ihrem Server aus irgendeinem Grund unterbrochen ist.

Sie drucken, dass Ihr Server auf localhost: 3001 ausgeführt wird. Prüfen Sie jedoch nicht, ob auf dem Server Fehler auftreten, die an diese Adresse gesendet werden.

Ersetzen Sie Ihre letzte Zeile im Server durch:

if err := grpcServer.Serve(lis); err != nil {
    log.Fatalf("failed to serve: %v", err)
}

Woher kommt auch der Kontext ctx beim Serverstart?


Ich gehe davon aus, dass Ihre Protodefinition ungefähr so ​​aussieht - ansonsten könnte es andere Probleme geben:

package ...;

service Domain {
   rpc Dispatch(Command) returns (...) {}
}

message Command {
   ... Name
   ... Payload    
}
0
Kevin Busse