7 Star 17 Fork 27

go-course/go9

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
cmd.go 2.18 KB
一键复制 编辑 原始数据 按行查看 历史
Mr.Yu 提交于 2023-02-25 12:02 +08:00 . update mpaas
package start
import (
"os"
"os/signal"
"strings"
"syscall"
"github.com/infraboard/mcube/app"
"github.com/spf13/cobra"
// 注册所有服务
_ "gitee.com/go-course/go9/projects/devcloud/mpaas/apps"
"gitee.com/go-course/go9/projects/devcloud/mpaas/common/logger"
"gitee.com/go-course/go9/projects/devcloud/mpaas/conf"
"gitee.com/go-course/go9/projects/devcloud/mpaas/protocol"
)
// startCmd represents the start command
var Cmd = &cobra.Command{
Use: "start",
Short: "mpaas API服务",
Long: "mpaas API服务",
RunE: func(cmd *cobra.Command, args []string) error {
conf := conf.C()
// 启动服务
ch := make(chan os.Signal, 1)
defer close(ch)
signal.Notify(ch, syscall.SIGTERM, syscall.SIGINT, syscall.SIGHUP, syscall.SIGQUIT)
// 初始化服务
svr, err := newService(conf)
if err != nil {
return err
}
// 等待信号处理
go svr.waitSign(ch)
// 启动服务
if err := svr.start(); err != nil {
if !strings.Contains(err.Error(), "http: Server closed") {
return err
}
}
return nil
},
}
func newService(cnf *conf.Config) (*service, error) {
http := protocol.NewHTTPService()
grpc := protocol.NewGRPCService()
svr := &service{
http: http,
grpc: grpc,
}
return svr, nil
}
type service struct {
http *protocol.HTTPService
grpc *protocol.GRPCService
}
func (s *service) start() error {
logger.L().Info().Msgf("loaded grpc app: %s", app.LoadedGrpcApp())
logger.L().Info().Msgf("loaded http app: %s", app.LoadedRESTfulApp())
logger.L().Info().Msgf("loaded internal app: %s", app.LoadedInternalApp())
go s.grpc.Start()
return s.http.Start()
}
func (s *service) waitSign(sign chan os.Signal) {
for sg := range sign {
switch v := sg.(type) {
default:
logger.L().Info().Msgf("receive signal '%v', start graceful shutdown", v.String())
if err := s.grpc.Stop(); err != nil {
logger.L().Info().Msgf("grpc graceful shutdown err: %s, force exit", err)
} else {
logger.L().Info().Msgf("grpc service stop complete")
}
if err := s.http.Stop(); err != nil {
logger.L().Info().Msgf("http graceful shutdown err: %s, force exit", err)
} else {
logger.L().Info().Msgf("http service stop complete")
}
return
}
}
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/go-course/go9.git
git@gitee.com:go-course/go9.git
go-course
go9
go9
cc206ec177a3

搜索帮助