在實(shí)際項(xiàng)目開(kāi)發(fā)中Web應(yīng)用有一類不可缺少的,那就是定時(shí)任務(wù)。 定時(shí)任務(wù)的場(chǎng)景可以說(shuō)非常廣泛,比如某些視頻網(wǎng)站,購(gòu)買(mǎi)會(huì)員后,每天會(huì)給會(huì)員送成長(zhǎng)值,每月會(huì)給會(huì)員送一些電影券; 比如在保證最終一致性的場(chǎng)景中,往往利用定時(shí)任務(wù)調(diào)度進(jìn)行一些比對(duì)工作;比如一些定時(shí)需要生成的報(bào)表、郵件;比如一些需要定時(shí)清理數(shù)據(jù)的任務(wù)等。 所以我們提供方便友好的web界面,實(shí)現(xiàn)動(dòng)態(tài)管理任務(wù),可以達(dá)到動(dòng)態(tài)控制定時(shí)任務(wù)啟動(dòng)、暫停、重啟、刪除、添加、修改等操作,極大地方便了開(kāi)發(fā)過(guò)程。
gfast 采用的是gf的gcron模塊提供了對(duì)定時(shí)任務(wù)的實(shí)現(xiàn),支持類似?crontab
?的配置管理方式,并支持最小粒度到秒的定時(shí)任務(wù)管理。
./task/bind_function.go
? 文件//定義一個(gè)無(wú)參測(cè)試任務(wù) 打印一個(gè)測(cè)試字符串
func Test1() {
println("無(wú)參測(cè)試")
}
//帶參數(shù)測(cè)試
func Test2() {
//獲取參數(shù)
t := service.TimeTaskList.GetByName("test2")
if t == nil {
return
}
for _, v := range t.Param {
fmt.Printf("參數(shù):%s; ", v)
}
fmt.Println()
}
func init() {
task1 := &service.TimeTask{
FuncName: "test1",
Run: Test1,
}
task2 := &service.TimeTask{
FuncName: "test2",
Run: Test2,
}
checkUserOnlineTask := &service.TimeTask{
FuncName: "checkUserOnline",
Run: api.Auth.CheckUserOnline,
}
service.TimeTaskList.AddTask(task1).AddTask(task2)
//自動(dòng)執(zhí)行已開(kāi)啟的任務(wù)
jobs, err := service.SysJob.GetJobs()
if err != nil {
g.Log().Error(err)
}
for _, job := range jobs {
service.SysJob.JobStart(job)
}
}
每隔一秒鐘可以看到控制臺(tái)輸出任務(wù)所打印的字符串:
注意:此處用于測(cè)試所有把測(cè)試方法直接寫(xiě)在了?demo.go
?文件中,正式使用的時(shí)候?yàn)榱瞬蛔尨宋募^(guò)于混亂,可以把要執(zhí)行的方法定義到其他文件或包下,直接綁定使用
更多建議: