package main import ( "app.yhyue.com/moapp/jybase/endless" "fmt" "jygit.jydev.jianyu360.cn/BaseService/ossService/config" "jygit.jydev.jianyu360.cn/BaseService/ossService/constant" ossService "jygit.jydev.jianyu360.cn/BaseService/ossService/oss" "jygit.jydev.jianyu360.cn/BaseService/ossService/util" "log" "net/http" "net/rpc" "time" ) func main() { log.SetOutput(config.AppConfig.Logger) // 初始化OSS帐号与bucket信息 ossService.LoadOSSAccounts() ossService.InitBuckets() // 初始化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 } if len(nodes) < config.AppConfig.WarnMaxNodeNum { alertMsg := fmt.Sprintf("在线节点数少于%d: 当前在线节点数:%d", config.AppConfig.WarnMaxNodeNum, len(nodes)) log.Println(alertMsg) if nowUnix := time.Now().Unix(); nowUnix-prevWarn > config.AppConfig.WarnInterval { 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) log.Println("HTTP server started on " + config.AppConfig.Port) if err := endless.ListenAndServe(config.AppConfig.Port, nil, func() {}); err != nil { log.Fatalln("HTTP server error: %v", err) } }