我在“重置”量规的值时遇到问题,因为一旦启动http servervice或当我开始循环“ runJob”然后服务器就没有启动时,“寿命就停止了”。
我试图建立此方法的方式:
我从YAML数组加载所有Job-s。 我从中生成量规,然后运行循环以获取一些值。 然后我注册它们。然后,我为prometheus启动http服务。
一切正常,直到下一个周期-下一个周期才刚刚开始。
我试图在函数等内部移动函数。
所以这就是我的主要功能:
//gets poll time from yaml (60s)
timerCh := time.Tick(time.Duration(appConf.PollTimeSec) * time.Second)
//loop after given time
for range timerCh {
runJobs()
}
//start new muxServer
server := http.NewServeMux()
log.Println("DEBUG: Starting server")
server.Handle(appConf.HostPath, promhttp.Handler())
http.ListenAndServe(":"+appConf.ListenerPort, server)
和我的runJobs函数基本上获取Http响应代码 并将它们投放到普罗米修斯量表值。 -一切正常,并且在启动时效果很好,但是在我尝试启动它之后,就进入睡眠状态(如主菜单所示)-
服务器已启动,值不变。
因此,我有两种可能的解决方法:
我的“ runJobs”是一个无限循环,每分钟运行一次
另一部分,当我首先启动服务器时,它再也不会到达启动runJobs()的那部分
首选结果应该是:
服务器从第一个值启动,并在每分钟之后再次运行“ runJobs”。
答案 0 :(得分:0)
编写方式,您的程序将不会超出for循环的范围。尝试以下方法:
go func() {
//loop after given time
for range timerCh {
runJobs()
}
}()
这会在其自己的goroutine中运行for循环,并且runJobs经常执行。