main.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package main
  2. import (
  3. "app.yhyue.com/moapp/jybase/endless"
  4. "fmt"
  5. "github.com/gogf/gf/v2/frame/g"
  6. "github.com/gogf/gf/v2/os/gctx"
  7. "github.com/gogf/gf/v2/os/gfsnotify"
  8. "gopkg.in/natefinch/lumberjack.v2"
  9. "jygit.jydev.jianyu360.cn/BaseService/ossClient/constant"
  10. ossService "jygit.jydev.jianyu360.cn/BaseService/ossService/oss"
  11. "jygit.jydev.jianyu360.cn/BaseService/ossService/util"
  12. "log"
  13. "net/http"
  14. "net/rpc"
  15. "time"
  16. )
  17. func main() {
  18. ctx := gctx.New()
  19. var logger *lumberjack.Logger
  20. g.Config().MustGet(ctx, "logger").Struct(&logger)
  21. log.SetOutput(logger)
  22. // 初始化OSS帐号与bucket信息
  23. ossService.LoadOSSAccounts()
  24. // 注册一个回调函数,当配置发生变更时会被调用
  25. gfsnotify.Add("./config.json", func(event *gfsnotify.Event) {
  26. if event.IsWrite() || event.IsChmod() {
  27. ossService.LoadOSSAccounts()
  28. }
  29. })
  30. // 初始化Redis(用于节点心跳检测)
  31. util.InitRedis()
  32. // 启动心跳检测协程,每5秒发送一次心跳,同时检查在线节点数量
  33. go func() {
  34. ticker := time.NewTicker(5 * time.Second)
  35. var prevWarn int64
  36. for range ticker.C {
  37. util.SendHeartbeat()
  38. nodes, err := util.CheckOnlineNodes()
  39. if err != nil {
  40. log.Println("Heartbeat check error", err)
  41. continue
  42. }
  43. warnMaxNodeNum := g.Config().MustGet(ctx, "warnMaxNodeNum").Int()
  44. if len(nodes) < warnMaxNodeNum {
  45. alertMsg := fmt.Sprintf("在线节点数少于%d: 当前在线节点数:%d", warnMaxNodeNum, len(nodes))
  46. log.Println(alertMsg)
  47. if nowUnix := time.Now().Unix(); nowUnix-prevWarn > g.Config().MustGet(ctx, "warnInterval").Int64() {
  48. prevWarn = nowUnix
  49. util.SendWeixinNotification(alertMsg)
  50. util.SendEmailNotification(alertMsg)
  51. }
  52. }
  53. }
  54. }()
  55. // 启动RPC服务:注册OSSService,实现接口调用
  56. rpcService := new(ossService.OSSService)
  57. rpc.Register(rpcService)
  58. rpc.HandleHTTP()
  59. http.HandleFunc(constant.UploadUrl, ossService.UploadHandler)
  60. http.HandleFunc(constant.DownloadUrl, ossService.DownloadHandler)
  61. http.HandleFunc(constant.DeleteUrl, ossService.DeleteHandler)
  62. http.HandleFunc("/ossservice/nodes", ossService.NodesHandler)
  63. http.HandleFunc(constant.GetBidDetailUrl, ossService.BidDetailHandler)
  64. port := g.Config().MustGet(ctx, "port").String()
  65. log.Println("HTTP server started on " + port)
  66. if err := endless.ListenAndServe(port, nil, func() {}); err != nil {
  67. log.Fatalln("HTTP server error", err)
  68. }
  69. }