Ich implementiere zwei Dienste (Server und Client), die auf zwei verschiedenen Containern ausgeführt werden und versuche, gRPC zu verwenden, um zwischen ihnen zu kommunizieren.Verwenden Sie gRPC, um zwischen Containern zu kommunizieren
Wenn ich den Server als Container bereitstellen und den Client nicht auf einem Container ausführen, funktioniert alles einwandfrei. Aber wenn ich den Client in einem anderen Container bereitstellen, erhalte ich Error #01: could not retrieve restaurant's list: rpc error: code = Unavailable desc = grpc: the connection is unavailable
Fehler.
Welche Schritte fehlen mir, um zwei verschiedene Container mit gRPC zu kommunizieren?
PS: Ich möchte jetzt erstmal ohne Kubernetes versuchen.
SERVER
func Serve() {
log.Println("serving...")
port := ":50051"
lis, err := net.Listen("tcp", port)
if err != nil {
log.Fatalf("failed to listen on port %s: %v", port, err)
}
s := grpc.NewServer()
server := server{}
RegisterNeo4BaconServer(s, server)
if err := s.Serve(lis); err != nil {
log.Fatal("could not serve: ", err)
}
}
Makefile
image: ## build docker image and push image to registry
@docker build -t neo4bacon -f resources/prod/Dockerfile .
run: ## deploy application container
@docker run --rm -d --name neo4bacon neo4bacon
CLIENT
func Get() (*api.RestaurantList, error) {
// Neo4bacon backend
backendPort := ":50051"
conn, err := grpc.Dial(backendPort, grpc.WithInsecure())
if err != nil {
&api.RestaurantList{}, fmt.Errorf("could not connect to backend %s: %s", backendPort, err)
}
defer conn.Close()
client := api.NewNeo4BaconClient(conn)
restaurantList, err := client.List(context.Background(), &api.Empty{})
if err != nil {
return &api.RestaurantList{}, fmt.Errorf("could not retrieve restaurant's list: %s", err)
}
return restaurantList, nil
}
Makefile
image: ## build docker image and push image to registry
@docker build -t alesr/bacon-api -f resources/prod/Dockerfile .
run: ## deploy docker container
@docker run --rm -d -p 8080:8080 --name bacon-api bacon-api
Wo auf der Client-Code, den Sie tun Geben Sie den Server-Host an, mit dem eine Verbindung hergestellt werden soll. Ich sehe das nicht ... –