Gogs 4 سال پیش
والد
کامیت
6c4d2255a6
1فایلهای تغییر یافته به همراه121 افزوده شده و 0 حذف شده
  1. 121 0
      share-v2/sharesrv2/sharesrv.go

+ 121 - 0
share-v2/sharesrv2/sharesrv.go

@@ -0,0 +1,121 @@
+// 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()
+}