feat app 模块化启动
This commit is contained in:
@@ -1,63 +1,58 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"common/db/etcd"
|
||||
"common/discover"
|
||||
"common/log"
|
||||
"common/net/grpc/service"
|
||||
"fmt"
|
||||
"github.com/judwhite/go-svc"
|
||||
"runtime/debug"
|
||||
"scene/config"
|
||||
"scene/grpc_server/server"
|
||||
"sync"
|
||||
)
|
||||
|
||||
type Program struct {
|
||||
wg *sync.WaitGroup
|
||||
server service.IService // grpc服务
|
||||
stop chan bool
|
||||
moduleList []Module // 模块列表
|
||||
}
|
||||
|
||||
type Module interface {
|
||||
Init() error
|
||||
Start() error
|
||||
Stop() error
|
||||
}
|
||||
|
||||
func (p *Program) Init(_ svc.Environment) error {
|
||||
if err := p.initBase(); err != nil {
|
||||
return err
|
||||
}
|
||||
cfg := config.Get()
|
||||
log.Infof(fmt.Sprintf("%v starting...", cfg.App.Name))
|
||||
if err := p.initDB(cfg); err != nil {
|
||||
return err
|
||||
p.moduleList = append(p.moduleList, &ModuleBase{})
|
||||
p.moduleList = append(p.moduleList, &ModuleDB{})
|
||||
p.moduleList = append(p.moduleList, &ModuleGrpcServer{})
|
||||
|
||||
for _, module := range p.moduleList {
|
||||
if err := module.Init(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
log.Infof(fmt.Sprintf("%v Init successful...", config.Get().App.Name))
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Program) Start() error {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
fmt.Printf("Start err: %v", err)
|
||||
debug.PrintStack()
|
||||
_ = p.Stop()
|
||||
for _, module := range p.moduleList {
|
||||
if err := module.Start(); err != nil {
|
||||
return err
|
||||
}
|
||||
}()
|
||||
|
||||
}
|
||||
discover.Listen()
|
||||
p.server = server.NewServer(config.Get().Serve.Grpc.TTL)
|
||||
p.server.Init(config.Get().Serve.Grpc.Address, config.Get().Serve.Grpc.Port)
|
||||
|
||||
log.Infof(fmt.Sprintf("%v Start successful...", config.Get().App.Name))
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Program) Stop() error {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
fmt.Printf("Stop err: %v", err)
|
||||
debug.PrintStack()
|
||||
}
|
||||
}()
|
||||
|
||||
discover.Close()
|
||||
p.server.Close()
|
||||
_ = etcd.Close()
|
||||
for i := len(p.moduleList) - 1; i >= 0; i-- {
|
||||
module := p.moduleList[i]
|
||||
if err := module.Stop(); err != nil {
|
||||
log.Errorf("module stop error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
log.Infof(fmt.Sprintf("%v Stop successful...", config.Get().App.Name))
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user