问题描述
type Server struct {
name string
host string
port string
dbUser string
dbPassword string
dbURL string
dbParameters string
}
func main() {
/*Start of config*/
server := Server{
"User service","",os.Getenv("PORT"),}
/*End of config*/
log.Printf("Starting: %s RPCServer\n",server.name)
lis,err := net.Listen("tcp",server.host+":"+server.port)
if err != nil {
log.Fatalf("Failed to liste: %v\n",err)
}
defer func() {
err = lis.Close()
if err != nil {
log.Fatalf("Failed to close listener: %v\n",err)
}
}()
gRPCServer := grpc.NewServer()
ctx,cancel := context.WithTimeout(context.Background(),10*time.Second)
defer cancel()
reg := codecs.Register(bson.NewRegistryBuilder()).Build()
mongoURI := options.Client().ApplyURI(
"mongodb+srv://" + server.dbUser + ":" + server.dbPassword + "@" + server.dbURL + server.dbParameters,)
mongoClient,err := mongo.NewClient(mongoURI,&options.ClientOptions{
Registry: reg,})
if err != nil {
log.Fatalf("unable to create new mongo clinet: %s\n",err)
}
err = mongoClient.Connect(ctx)
if err != nil {
log.Fatalf("unable to connect to db: %s\n",err)
}
/*Start of registering service*/
authService,err := AuthService.NewAuthService()
if err != nil {
log.Fatalf("unable to create server: %s\n",err)
}
s := UserService.NewServer(authService,mongoClient)
UserService.RegisterUserServiceServer(gRPCServer,&s)
/*End of registering service*/
go func() {
if err := gRPCServer.Serve(lis); err != nil {
log.Printf("Failed to serve: %v\n",err)
}
}()
log.Printf("server successfully started on port: %s\n\n",server.port)
c := make(chan os.Signal)
signal.Notify(c,os.Interrupt)
<-c
log.Printf("\nstopping server...\n")
gRPCServer.Stop()
err = lis.Close()
if err != nil {
log.Fatalf("Failed to close listner: %s\n",err)
}
err = mongoClient.disconnect(ctx)
if err != nil {
log.Fatalf("Failed to disconnect from mongodb: %s\n",err)
}
log.Printf("successfully closed server\n")
}
我的 Dockerfile 是
FROM golang:alpine AS build-env
workdir /app
ADD . /app
RUN cd /app && go build Main/server.go
FROM alpine
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/*
workdir /app
copY --from=build-env /app/server /app
copY --from=build-env /app/Config/* /app
ENV GOOGLE_APPLICATION_CREDENTIALS=cred.json
EXPOSE 50051
CMD ["./server"]
我在 Google Container Registry 上放置了 docker 镜像,并尝试使用 Cloud Run 使用以下命令运行它
gcloud run deploy grpc-server-streaming\
--project=project-id\
--platform=managed\
--region=asia-south1\
--image=image-tag\
--allow-unauthenticated
之后我进入了 Cloud Run 应用程序并启用了 HTTP/2 连接。但是我仍然无法连接到该服务。我收到以下错误
2021/04/21 17:04:36 rpc error: code = Unavailable desc = upstream connect error or disconnect/reset before headers. reset reason: connection termination
我已经被困在这两天了,不知道该怎么办。