iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
0
Modern Web

BeeGo系列 第 22

Tasks

  • 分享至 

  • xImage
  •  

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

參考資料


上一篇
Health check
下一篇
回應格式
系列文
BeeGo30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言