main.go 2.4 KB

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