main.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. log.Println(event.String())
  27. if event.IsWrite() || event.IsChmod() || event.IsRename() {
  28. log.Println("配置文件有变化,更新内存。。。")
  29. ossService.LoadOSSAccounts()
  30. }
  31. })
  32. // 初始化Redis(用于节点心跳检测)
  33. util.InitRedis()
  34. // 启动心跳检测协程,每5秒发送一次心跳,同时检查在线节点数量
  35. go func() {
  36. ticker := time.NewTicker(5 * time.Second)
  37. var prevWarn int64
  38. for range ticker.C {
  39. util.SendHeartbeat()
  40. nodes, err := util.CheckOnlineNodes()
  41. if err != nil {
  42. log.Println("Heartbeat check error", err)
  43. continue
  44. }
  45. warnMaxNodeNum := g.Config().MustGet(ctx, "warnMaxNodeNum").Int()
  46. if len(nodes) < warnMaxNodeNum {
  47. alertMsg := fmt.Sprintf("在线节点数少于%d: 当前在线节点数:%d", warnMaxNodeNum, len(nodes))
  48. log.Println(alertMsg)
  49. if nowUnix := time.Now().Unix(); nowUnix-prevWarn > g.Config().MustGet(ctx, "warnInterval").Int64() {
  50. prevWarn = nowUnix
  51. util.SendWeixinNotification(alertMsg)
  52. util.SendEmailNotification(alertMsg)
  53. }
  54. }
  55. }
  56. }()
  57. // 启动RPC服务:注册OSSService,实现接口调用
  58. rpcService := new(ossService.OSSService)
  59. rpc.Register(rpcService)
  60. rpc.HandleHTTP()
  61. http.HandleFunc(constant.UploadUrl, ossService.UploadHandler)
  62. http.HandleFunc(constant.DownloadUrl, ossService.DownloadHandler)
  63. http.HandleFunc(constant.DeleteUrl, ossService.DeleteHandler)
  64. http.HandleFunc("/ossservice/nodes", ossService.NodesHandler)
  65. http.HandleFunc(constant.GetBidDetailUrl, ossService.BidDetailHandler)
  66. port := g.Config().MustGet(ctx, "port").String()
  67. log.Println("HTTP server started on " + port)
  68. if err := endless.ListenAndServe(port, nil, func() {}); err != nil {
  69. log.Fatalln("HTTP server error", err)
  70. }
  71. }