在 Golang 中使用 Gin gonic 和一些调度器
Using Gin gonic and some scheduler in Golang
我在 Gin Gonic 中有一些 REST 服务,我需要使用一些调度程序每 5 秒做一些工作。我试过 rakanalh
和 gocron
但似乎在初始化 crons 或 gin 路由后编写的每个代码都不会执行。
func main() {
settings.AppSettings = settings.ReadSettings()
db.InitOracleDataBase()
OracleEnv, OracleSrv, OracleSes := db.GetOracleDB()
defer OracleEnv.Close()
defer OracleSrv.Close()
defer OracleSes.Close()
routes.Init()
gocron.Every(5).Seconds().Do(prOk)
<-gocron.Start()
}
prOk 只是打印 OK,它永远不会被执行,直到我评论 routes.init()
。
运行 如何同时使用 cron 和 gin 路由?
我正在做类似的事情,缓存一些 API 结果并每隔几秒刷新一次缓存。不过,我不使用标准库以外的任何东西。这是一些示例代码。
func UpdateCache() {
var lock sync.Mutex
timer1 := time.NewTicker(time.Second * 10)
defer timer1.Stop()
timer2 := time.NewTicker(time.Second * 5)
defer timer2.Stop()
for {
/* run forever */
select {
case <-timer1.C:
go func() {
lock.Lock()
defer lock.Unlock()
/* do things I need done every 10 seconds */
}()
case <-timer2.C:
go func() {
lock.Lock()
defer lock.Unlock()
/* do things I need done every 5 seconds */
}()
}
}
}
在 main() 中我有
go UpdateCache()
router := gin.Default()
/* setup all the routes */
listen := os.Getenv("SERVICE_ADDR")
router.Run(listen)
我认为你 运行 遇到的问题是你在 routes.Init() 中开始 运行 你的路线并且它阻塞并且永远不会进入你的 cron 设置。
您需要在 goroutine 中执行 gocron,因为主 goroutine 会阻塞(我想 routes.Init()
也会启动 HTTP 服务器?)
func main() {
settings.AppSettings = settings.ReadSettings()
db.InitOracleDataBase()
OracleEnv, OracleSrv, OracleSes := db.GetOracleDB()
defer OracleEnv.Close()
defer OracleSrv.Close()
defer OracleSes.Close()
go func() {
gocron.Every(5).Seconds().Do(prOk)
<-gocron.Start()
}()
routes.Init()
}
我在 Gin Gonic 中有一些 REST 服务,我需要使用一些调度程序每 5 秒做一些工作。我试过 rakanalh
和 gocron
但似乎在初始化 crons 或 gin 路由后编写的每个代码都不会执行。
func main() {
settings.AppSettings = settings.ReadSettings()
db.InitOracleDataBase()
OracleEnv, OracleSrv, OracleSes := db.GetOracleDB()
defer OracleEnv.Close()
defer OracleSrv.Close()
defer OracleSes.Close()
routes.Init()
gocron.Every(5).Seconds().Do(prOk)
<-gocron.Start()
}
prOk 只是打印 OK,它永远不会被执行,直到我评论 routes.init()
。
运行 如何同时使用 cron 和 gin 路由?
我正在做类似的事情,缓存一些 API 结果并每隔几秒刷新一次缓存。不过,我不使用标准库以外的任何东西。这是一些示例代码。
func UpdateCache() {
var lock sync.Mutex
timer1 := time.NewTicker(time.Second * 10)
defer timer1.Stop()
timer2 := time.NewTicker(time.Second * 5)
defer timer2.Stop()
for {
/* run forever */
select {
case <-timer1.C:
go func() {
lock.Lock()
defer lock.Unlock()
/* do things I need done every 10 seconds */
}()
case <-timer2.C:
go func() {
lock.Lock()
defer lock.Unlock()
/* do things I need done every 5 seconds */
}()
}
}
}
在 main() 中我有
go UpdateCache()
router := gin.Default()
/* setup all the routes */
listen := os.Getenv("SERVICE_ADDR")
router.Run(listen)
我认为你 运行 遇到的问题是你在 routes.Init() 中开始 运行 你的路线并且它阻塞并且永远不会进入你的 cron 设置。
您需要在 goroutine 中执行 gocron,因为主 goroutine 会阻塞(我想 routes.Init()
也会启动 HTTP 服务器?)
func main() {
settings.AppSettings = settings.ReadSettings()
db.InitOracleDataBase()
OracleEnv, OracleSrv, OracleSes := db.GetOracleDB()
defer OracleEnv.Close()
defer OracleSrv.Close()
defer OracleSes.Close()
go func() {
gocron.Every(5).Seconds().Do(prOk)
<-gocron.Start()
}()
routes.Init()
}