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