新聞中心
Revel 支持計劃任務(wù)(異步執(zhí)行), 運行在請求流程的外部。比如,更新緩存數(shù)據(jù)的周期性任務(wù),或發(fā)送電子郵件的臨時任務(wù)。

創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的子洲網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
Revel 計劃任務(wù)激活
該框架是一個可選模塊,默認是禁用的。要將它激活,需要在配置文件中添加該模塊:
module.jobs = github.com/revel/revel/modules/jobs此外,為了訪問計劃任務(wù)的監(jiān)控頁面,需要將下面的內(nèi)容添加到路由文件中:
module:jobs這條語句將插入 /@jobs 路由
選項
有兩個選項來限制計劃任務(wù)。
這個例子顯示了它們的默認值。
jobs.pool = 10 # 允許同時運行的任務(wù)數(shù)
jobs.selfconcurrent = false # 一個任務(wù)只允許一個實例啟動計劃任務(wù)
應(yīng)用程序啟動時, 使用revel.OnAppStart 注冊一個函數(shù)來運行一個任務(wù)。Revel 在服務(wù)啟動之前,會連續(xù)啟動這些任務(wù)。 請注意,此功能實際上并未使用計劃任務(wù)模塊,它被用來提交任務(wù),但并不阻止服務(wù)器的啟動。
func init() {
revel.OnAppStart(func() { jobs.Now(populateCache{}) })
}周期性任務(wù)
任務(wù)可以被指定在任意時間運行。使用的時間表有兩個選項:
- 一個cron時間格式
- 固定時間間隔
Revel 使用 cron library 來解析時間表和任務(wù)。cron庫的說明 提供了時間格式的詳細描述。
計劃任務(wù)通常使用 revel.OnAppStart 鉤子進行注冊,但也可以在以后的任何時間注冊。
下面是一些例子:
import (
"github.com/revel/revel"
"github.com/revel/revel/modules/jobs/app/jobs"
"time"
)
type ReminderEmails struct {
// 過濾
}
func (e ReminderEmails) Run() {
// 查詢數(shù)據(jù)庫
// 發(fā)送電子郵件
}
func init() {
revel.OnAppStart(func() {
jobs.Schedule("0 0 0 * * ?", ReminderEmails{})
jobs.Schedule("@midnight", ReminderEmails{})
jobs.Schedule("@every 24h", ReminderEmails{})
jobs.Every(24 * time.Hour, ReminderEmails{})
})
}時間表
您可以在 app.conf文件中配置時間表,并在任何地方引用。這可以為 crontab 格式提供易于重用和有用的說明。
在 app.conf定義你的時間表,:
cron.workhours_15m = 0 */15 9-17 ? * MON-FRI使用一個cron規(guī)范指定時間表,就可以在任何地方引用它。
func init() {
revel.OnAppStart(func() {
jobs.Schedule("cron.workhours_15m", ReminderEmails{})
})
}注意: cron 時間表的名字必須以 “cron.”開頭
臨時任務(wù)
有時候在響應(yīng)用戶的一個操作時,還要處理一些事情。在這種情況下,模塊可以在某個時間運行一個任務(wù)。
模塊提供的唯一控制是等待多長時間運行任務(wù)。
type AppController struct { *revel.Controller }
func (c AppController) Action() revel.Result {
// 處理請求
...
// 立即發(fā)送電子郵件(異步)
jobs.Now(SendConfirmationEmail{})
// 或者,一分鐘后發(fā)送電子郵件(異步)。
jobs.In(time.Minute, SendConfirmationEmail{})
}注冊函數(shù)
通過使用jobs.Func類型包裝一個func()函數(shù),來注冊一個任務(wù)。例如:
func sendReminderEmails() {
// 查詢數(shù)據(jù)庫
// 發(fā)送電子郵件
}
func init() {
revel.OnAppStart(func() {
jobs.Schedule("@midnight", jobs.Func(sendReminderEmails))
})
}任務(wù)狀態(tài)
模塊提供了一個狀態(tài)頁面,用來顯示任務(wù)的運行狀態(tài)(IDLE 或 RUNNING), 以及之前和下次運行時間。
網(wǎng)站欄目:創(chuàng)新互聯(lián)Revel教程:Revel計劃任務(wù)
文章鏈接:http://www.5511xx.com/article/cddssop.html


咨詢
建站咨詢
