Files
backend/cmd/main.go
T
2026-07-15 22:42:31 +08:00

71 lines
1.7 KiB
Go

package main
import (
"context"
"net/http"
"time"
"github.com/XingfenD/yoresee_doc/internal/bootstrap"
"github.com/XingfenD/yoresee_doc/internal/config"
"github.com/XingfenD/yoresee_doc/internal/transport/connectserver"
"github.com/XingfenD/yoresee_doc/internal/utils"
"github.com/sirupsen/logrus"
)
func main() {
initializer := bootstrap.NewInitializer().
InitConfig().
InitPostgres().
InitRedis().
InitConsul().
RequireConsulEnabled().
InitMinio().
InitElasticsearchAllowFail().
InitMQ().
InitRepository().
InitService()
if err := initializer.Err(); err != nil {
logrus.Fatalf("Init backend failed: %v", err)
}
grpcServer, grpcWebServer, err := connectserver.Start(
config.GlobalConfig.Server.GrpcPort,
config.GlobalConfig.Server.GrpcWebPort,
initializer.Repositories.DB,
initializer.Repositories.Redis,
initializer.Repositories,
)
if err != nil {
logrus.Fatalf("Start connect servers failed: %v", err)
}
waitForShutdown(initializer, grpcServer, grpcWebServer)
}
func waitForShutdown(initializer *bootstrap.Initializer, grpcServer, grpcWebServer *http.Server) {
signalCtx, stop := utils.ShutdownContext()
defer stop()
<-signalCtx.Done()
logrus.Info("Shutdown signal received, start draining")
connectserver.SetDraining(true)
shutdownServer("grpc-web", grpcWebServer, 10*time.Second)
shutdownServer("grpc", grpcServer, 10*time.Second)
initializer.Shutdown()
}
func shutdownServer(name string, server *http.Server, timeout time.Duration) {
if server == nil {
return
}
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
if err := server.Shutdown(ctx); err != nil {
logrus.Errorf("Shutdown %s server failed: %v", name, err)
}
}