feat 模块增加after start
This commit is contained in:
15
app/app.go
15
app/app.go
@@ -6,8 +6,10 @@ import (
|
||||
"git.hlsq.asia/mmorpg/service-common/log"
|
||||
"git.hlsq.asia/mmorpg/service-common/module"
|
||||
"git.hlsq.asia/mmorpg/service-gateway/config"
|
||||
"git.hlsq.asia/mmorpg/service-gateway/internal/global"
|
||||
"git.hlsq.asia/mmorpg/service-gateway/internal/grpc_server"
|
||||
"github.com/judwhite/go-svc"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type Program struct {
|
||||
@@ -23,8 +25,8 @@ func (p *Program) Init(_ svc.Environment) error {
|
||||
p.moduleList = append(p.moduleList, (&module.DB{}).Bind(config.Get().DB))
|
||||
p.moduleList = append(p.moduleList, &ModuleWebServer{})
|
||||
p.moduleList = append(p.moduleList, &ModuleWebsocketServer{})
|
||||
p.moduleList = append(p.moduleList, (&module.Grpc{}).Bind(grpc_server.NewServer(config.Get().Serve.Grpc)))
|
||||
p.moduleList = append(p.moduleList, &ModuleLoginQueue{})
|
||||
p.moduleList = append(p.moduleList, (&module.Grpc{}).Bind(grpc_server.NewServer(config.Get().Serve.Grpc)))
|
||||
p.moduleList = append(p.moduleList, (&module.Prometheus{}).Bind(config.Get().Metric))
|
||||
p.moduleList = append(p.moduleList, (&module.Tracer{}).Bind(config.Get().Metric, common.KeyDiscoverServiceNameGateway))
|
||||
p.moduleList = append(p.moduleList, &module.Discover{})
|
||||
@@ -42,11 +44,20 @@ func (p *Program) Init(_ svc.Environment) error {
|
||||
}
|
||||
|
||||
func (p *Program) Start() error {
|
||||
ready := &sync.WaitGroup{}
|
||||
ready.Add(len(p.moduleList))
|
||||
for _, m := range p.moduleList {
|
||||
if err := m.Start(); err != nil {
|
||||
if err := m.Start(ready); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
ready.Wait()
|
||||
for _, m := range p.moduleList {
|
||||
if err := m.AfterStart(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
global.ServiceStatus = global.ServiceStatusReady
|
||||
|
||||
log.Infof(fmt.Sprintf("%v Start successful...", config.Get().App.Name))
|
||||
return nil
|
||||
|
||||
13
app/base.go
13
app/base.go
@@ -10,6 +10,7 @@ import (
|
||||
|
||||
// ModuleBase 基础模块,或者一些零散的模块
|
||||
type ModuleBase struct {
|
||||
module.DefaultModule
|
||||
}
|
||||
|
||||
func (m *ModuleBase) Init() error {
|
||||
@@ -24,15 +25,3 @@ func (m *ModuleBase) Init() error {
|
||||
utils.InitSnowflake(int64(rand.Intn(1000)))
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleBase) Start() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleBase) Stop() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleBase) Bind(_ ...any) module.Module {
|
||||
return m
|
||||
}
|
||||
|
||||
@@ -5,10 +5,12 @@ import (
|
||||
"git.hlsq.asia/mmorpg/service-gateway/internal/global"
|
||||
"git.hlsq.asia/mmorpg/service-gateway/internal/handler/ws_handler/login"
|
||||
"runtime"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// ModuleLoginQueue 登录队列模块
|
||||
type ModuleLoginQueue struct {
|
||||
module.DefaultModule
|
||||
login *login.Login
|
||||
queueUp *login.QueueUp
|
||||
}
|
||||
@@ -19,8 +21,9 @@ func (m *ModuleLoginQueue) Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleLoginQueue) Start() error {
|
||||
func (m *ModuleLoginQueue) Start(ready *sync.WaitGroup) error {
|
||||
m.login.Start(runtime.NumCPU())
|
||||
ready.Done()
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -28,7 +31,3 @@ func (m *ModuleLoginQueue) Stop() error {
|
||||
m.login.Stop()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleLoginQueue) Bind(_ ...any) module.Module {
|
||||
return m
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
|
||||
// ModuleWebServer Web服务模块
|
||||
type ModuleWebServer struct {
|
||||
module.DefaultModule
|
||||
wg *sync.WaitGroup
|
||||
server *http.Server
|
||||
}
|
||||
@@ -23,7 +24,7 @@ func (m *ModuleWebServer) Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleWebServer) Start() error {
|
||||
func (m *ModuleWebServer) Start(ready *sync.WaitGroup) error {
|
||||
m.wg.Add(1)
|
||||
go func() {
|
||||
defer m.wg.Done()
|
||||
@@ -31,6 +32,7 @@ func (m *ModuleWebServer) Start() error {
|
||||
Addr: fmt.Sprintf("%v:%v", config.Get().Serve.Http.Address, config.Get().Serve.Http.Port),
|
||||
Handler: http_gateway.InitRouter(),
|
||||
}
|
||||
ready.Done()
|
||||
if err := m.server.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
|
||||
log.Errorf("http server failed: %v", err.Error())
|
||||
}
|
||||
@@ -46,7 +48,3 @@ func (m *ModuleWebServer) Stop() error {
|
||||
m.wg.Wait()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleWebServer) Bind(_ ...any) module.Module {
|
||||
return m
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
|
||||
// ModuleWebsocketServer Websocket服务模块
|
||||
type ModuleWebsocketServer struct {
|
||||
module.DefaultModule
|
||||
wg *sync.WaitGroup
|
||||
server *websocket.WSServer
|
||||
}
|
||||
@@ -28,10 +29,11 @@ func (m *ModuleWebsocketServer) Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleWebsocketServer) Start() error {
|
||||
func (m *ModuleWebsocketServer) Start(ready *sync.WaitGroup) error {
|
||||
m.wg.Add(1)
|
||||
go func() {
|
||||
defer m.wg.Done()
|
||||
ready.Done()
|
||||
_ = m.server.Run(
|
||||
fmt.Sprintf("tcp4://0.0.0.0:%v", config.Get().Serve.Socket.Web.Port),
|
||||
true,
|
||||
@@ -55,7 +57,3 @@ func (m *ModuleWebsocketServer) Stop() error {
|
||||
m.wg.Wait()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *ModuleWebsocketServer) Bind(_ ...any) module.Module {
|
||||
return m
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user