Tasks 也是 toolbox 提供的一樣功能,主要是可以讓你寫定期執行的任務,像是定期刪除掉很久沒存取的檔案等等的。乍看之時,我本來以為是類似 Celery 的分散任務佇列系統,但很可惜,並不完全是。
當然也可以不使用這功能,直接使用 Linux 的 Cron 或是 Windows 的「工作排程器」,只是這樣子就需要費心怎麼去佈署了。
首先,先建立一個 tasks 資料夾,然後在裏面新增一個 default.go 檔案。
package tasks
import (
"github.com/astaxie/beego/logs"
"github.com/astaxie/beego/toolbox"
)
func init() {
logs.Debug("Register tasks")
periodicTask := toolbox.NewTask("periodicTask", "*/2 * * * * *", func() error {
logs.Debug("periodicTask")
return nil
})
toolbox.AddTask("periodicTask", periodicTask)
toolbox.StartTask()
defer toolbox.StopTask()
}
裏面的 init() 會在 import 時,自動被執行。
我們在 init() 裡定義了一個 task,這個 task 很簡單的印出 "periodicTask"
toolbox.NewTask() 的第一個參數是名稱,第二個參數是指定執行的時間,這個格式跟 crontab 一樣
<Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week>
而第三個參數則是要執行的函式。
新增完 Task 以後,就可以使用 AddTask() 加入,接著再用 StartTask() 來執行。
main.go 那邊也需要做一點調整,需要將 tasks import 進來。
// main.go
import (
// ... 前面省略 ...
_ "github.com/elleryq/ithome-iron-beego/tasks"
// ... 後面省略 ...
在 Admin 介面上 (http://localhost:8088/task) 也可以看到所有的 Task 列表。
完整的程式我放在 https://github.com/elleryq/ithome-iron-beego/tree/day_22