package app import ( "common/log" "common/net/grpc/service" "common/proto/ss/grpc_pb" "context" "errors" "fmt" "gateway/config" "gateway/internal/net/http_gateway" "net/http" "sync" ) // ModuleGrpcGateway GrpcGateway服务模块 type ModuleGrpcGateway struct { wg *sync.WaitGroup // 微服务列表 services []service.IService server *http.Server } func (m *ModuleGrpcGateway) init() error { m.wg = &sync.WaitGroup{} return nil } func (m *ModuleGrpcGateway) start() error { m.wg.Add(1) go func() { defer m.wg.Done() conn, err := service.UserNewClientLB() if err != nil { log.Errorf("get user conn failed: %v", err) return } gwMux := http_gateway.InitServeMux() if err = grpc_pb.RegisterUserHandlerClient(context.Background(), gwMux, conn); err != nil { log.Errorf("RegisterUserHandlerClient err: %v", err) return } m.server = &http.Server{ Addr: fmt.Sprintf("%v:%v", config.Get().Serve.Http.Address, config.Get().Serve.Http.Port), Handler: http_gateway.InitRouter(gwMux), } if err := m.server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { log.Errorf("http server failed: %v", err.Error()) } log.Infof("http server stop.") }() return nil } func (m *ModuleGrpcGateway) stop() error { if err := m.server.Shutdown(context.Background()); err != nil { log.Errorf("stop http server failed: %v", err) } m.wg.Wait() return nil }