-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmian.go
95 lines (74 loc) · 1.67 KB
/
mian.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package main
import (
"errors"
"fmt"
"gin/config"
"gin/model"
"gin/pkg/cache"
"gin/router"
"github.com/gin-gonic/gin"
"github.com/lexkong/log"
"github.com/spf13/viper"
"net/http"
"time"
)
func main() {
var (
err error
middlewares []gin.HandlerFunc
g *gin.Engine
)
// 加载配置文件
if err = config.Init(""); err != nil {
panic(err)
}
// 初始化数据库
model.Init()
defer model.Close()
// 初始化缓存
cache.Init()
defer cache.Close()
gin.SetMode(viper.GetString("runmode"))
g = gin.New()
middlewares = []gin.HandlerFunc{}
router.Load(
g,
middlewares...,
)
//心跳检测
go func() {
if err = pingService(); err != nil {
log.Fatalf(err,"心跳检测失败,路由不可用!错误:%v", err)
}
log.Info("心跳检测成功,路由可用。")
}()
g.GET("/test1", func(context *gin.Context) {
context.String(http.StatusOK, "it is a test")
})
err = http.ListenAndServe(viper.GetString("addr"),g)
fmt.Println(err)
}
// api进程运行成功不代表api服务可以正常对外提供服务,因此做了自检
func pingService() error {
var (
addr string
response *http.Response
err error
retry int
password string
url string
)
addr = viper.GetString("addr")
retry = viper.GetInt("health_retry_count")
password = viper.GetString("health_password")
url = fmt.Sprintf("http://127.0.0.1%s/health/ping?password=%s", addr, password)
for i := 1; i <= retry ; i++ {
response, err = http.Get(url)
if response != nil && err == nil && response.StatusCode == http.StatusOK {
return nil
}
log.Infof("尝试在1秒之后重试!")
time.Sleep(1 * time.Second)
}
return errors.New("心跳检测失败!")
}