package main import ( "app.yhyue.com/moapp/jybase/endless" "fmt" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gctx" "github.com/gogf/gf/v2/os/gfsnotify" "gopkg.in/natefinch/lumberjack.v2" "jygit.jydev.jianyu360.cn/BaseService/ossClient/constant" ossService "jygit.jydev.jianyu360.cn/BaseService/ossService/oss" "jygit.jydev.jianyu360.cn/BaseService/ossService/util" "log" "net/http" "net/rpc" "time" ) func main() { ctx := gctx.New() var logger *lumberjack.Logger g.Config().MustGet(ctx, "logger").Struct(&logger) log.SetOutput(logger) // 初始化OSS帐号与bucket信息 ossService.LoadOSSAccounts() // 注册一个回调函数,当配置发生变更时会被调用 gfsnotify.Add("./config.json", func(event *gfsnotify.Event) { if event.IsWrite() || event.IsChmod() { log.Println("配置文件有变化,更新内存。。。") ossService.LoadOSSAccounts() } }) // 初始化Redis(用于节点心跳检测) util.InitRedis() // 启动心跳检测协程,每5秒发送一次心跳,同时检查在线节点数量 go func() { ticker := time.NewTicker(5 * time.Second) var prevWarn int64 for range ticker.C { util.SendHeartbeat() nodes, err := util.CheckOnlineNodes() if err != nil { log.Println("Heartbeat check error", err) continue } warnMaxNodeNum := g.Config().MustGet(ctx, "warnMaxNodeNum").Int() if len(nodes) < warnMaxNodeNum { alertMsg := fmt.Sprintf("在线节点数少于%d: 当前在线节点数:%d", warnMaxNodeNum, len(nodes)) log.Println(alertMsg) if nowUnix := time.Now().Unix(); nowUnix-prevWarn > g.Config().MustGet(ctx, "warnInterval").Int64() { prevWarn = nowUnix util.SendWeixinNotification(alertMsg) util.SendEmailNotification(alertMsg) } } } }() // 启动RPC服务:注册OSSService,实现接口调用 rpcService := new(ossService.OSSService) rpc.Register(rpcService) rpc.HandleHTTP() http.HandleFunc(constant.UploadUrl, ossService.UploadHandler) http.HandleFunc(constant.DownloadUrl, ossService.DownloadHandler) http.HandleFunc(constant.DeleteUrl, ossService.DeleteHandler) http.HandleFunc("/ossservice/nodes", ossService.NodesHandler) http.HandleFunc(constant.GetBidDetailUrl, ossService.BidDetailHandler) port := g.Config().MustGet(ctx, "port").String() log.Println("HTTP server started on " + port) if err := endless.ListenAndServe(port, nil, func() {}); err != nil { log.Fatalln("HTTP server error", err) } }