123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // sharesrv.main 分享主服务入口
- package main
- import (
- "context"
- "fmt"
- "net/http"
- "os"
- "os/signal"
- "share/internal/funcaward"
- "syscall"
- "time"
- "share/config"
- "share/docs/srv/docs"
- "share/internal/event"
- "share/internal/prometheus"
- "share/internal/share"
- "share/internal/utils"
- "share/pkg/db"
- "share/pkg/log"
- "git.jiaxianghudong.com/yunfan/yunfan"
- "github.com/pkg/errors"
- )
- var (
- Version = "0.0.1"
- BuildTime string
- )
- // @title 家乡互动 Share API
- // @version 0.1
- // @description 家乡互动分享服务
- // @BasePath /share/v2
- // @host localhost:9091
- func main() {
- log.Infow("", "Version", Version, "BuildTime", BuildTime)
- // 初始化Mysql
- cfgMysql := config.GetMysql()
- if err := db.Init(cfgMysql.Addr,
- cfgMysql.UserName,
- cfgMysql.Password,
- db.DB(cfgMysql.Db...),
- db.MaxIdle(cfgMysql.MaxIdle),
- db.MaxCons(cfgMysql.MaxOpen),
- db.ParseTime()); err != nil {
- log.Error(errors.WithMessage(err, "init mysql failed"))
- return
- }
- // 服务退出前,释放数据库资源
- defer db.Close()
- event.WatchEvent()
- // 道具服务连接
- share.ConnPropSrv()
- // 初始化分享埋点配置
- funcaward.InitAwards()
- httpPort := config.HTTPPort()
- mode := config.RunMode()
- if mode == "debug" {
- docs.SwaggerInfo.Host = fmt.Sprintf("%s:%d", utils.GetInternalIP(), httpPort)
- //docs.SwaggerInfo.Host = fmt.Sprintf("%s:%d", "192.168.14.117", httpPort)
- docs.SwaggerInfo.Version = Version
- }
- prometheus.Init("yunfan", config.GetName(), mode, utils.GetInternalIP())
- // 有设置RPC端口,则运行RPC服务
- if config.GetRPCPort() != 0 {
- go func() {
- if err := share.RunRPC(); err != nil && err != yunfan.ErrShutdown {
- log.Error(errors.WithMessage(err, "server run rpc failed"))
- os.Exit(1)
- return
- }
- }()
- }
- // 有设置HTTP端口, 则运行HTTP服务
- if httpPort != 0 {
- // 启动服务监听
- go func(port int, mode string) {
- if err := share.RunHttp(port, mode); err != nil && err != http.ErrServerClosed {
- log.Error(errors.WithMessage(err, "server run http failed"))
- os.Exit(1)
- return
- }
- }(httpPort, mode)
- }
- log.Infof("server[%s] serving on port:%d", mode, httpPort)
- waitStop()
- }
- // waitStop 等待服务停止
- func waitStop() {
- // 捕捉退出信号
- sig := make(chan os.Signal, 1)
- signal.Notify(sig, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGHUP)
- s := <-sig
- log.Infof("receive signal:%d , server stopping ...", s)
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
- if err := share.Stop(ctx); err != nil {
- log.Error(errors.Wrap(err, "server stop failed"))
- return
- }
- log.Info("server exited")
- _ = log.Sync()
- }
|