×

概要

Revel 介绍Revel 概念Revel 项目结构

Revel 控制器

Revel 控制器概要Revel 路由routesRevel 参数绑定Revel 参数验证Revel Session / FlashRevel 国际化Revel Results

Revel 模板

Revel 拦截器Revel 缓存CacheRevel 过滤器Revel Websockets

Revel 模块

Revel 模块概要Revel 测试Revel 计划任务

Revel 操作

Revel 日志类型Revel 版本控制Revel 部署

Revel 参考资料

Revel 配置文件app.confRevel 命令行工具Revel 常见问题

Revel 计划任务


Revel 支持计划任务(异步执行), 运行在请求流程的外部。比如,更新缓存数据的周期性任务,或发送电子邮件的临时任务。

Revel 计划任务激活

该框架是一个可选模块,默认是禁用的。要将它激活,需要在配置文件中添加该模块:

module.jobs = github.com/revel/revel/modules/jobs

此外,为了访问计划任务的监控页面,需要将下面的内容添加到路由文件中:

module:jobs

这条语句将插入 /@jobs 路由

选项

有两个选项来限制计划任务。

这个例子显示了它们的默认值。

jobs.pool = 10                # 允许同时运行的任务数
jobs.selfconcurrent = false   # 一个任务只允许一个实例

启动计划任务

应用程序启动时, 使用revel.OnAppStart 注册一个函数来运行一个任务。Revel 在服务启动之前,会连续启动这些任务。 请注意,此功能实际上并未使用计划任务模块,它被用来提交任务,但并不阻止服务器的启动。

func init() {
    revel.OnAppStart(func() { jobs.Now(populateCache{}) })
}

周期性任务

任务可以被指定在任意时间运行。使用的时间表有两个选项:

  1. 一个cron时间格式
  2. 固定时间间隔

Revel 使用 cron library 来解析时间表和任务。cron库的说明 提供了时间格式的详细描述。

计划任务通常使用 revel.OnAppStart 钩子进行注册,但也可以在以后的任何时间注册。

下面是一些例子:

import (
    "github.com/revel/revel"
    "github.com/revel/revel/modules/jobs/app/jobs"
    "time"
)

type ReminderEmails struct {
    // 过滤
}

func (e ReminderEmails) Run() {
    // 查询数据库
    // 发送电子邮件
}

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规范指定时间表,就可以在任何地方引用它。

func init() {
    revel.OnAppStart(func() {
        jobs.Schedule("cron.workhours_15m", ReminderEmails{})
    })
}

注意: cron 时间表的名字必须以 “cron.”开头

临时任务

有时候在响应用户的一个操作时,还要处理一些事情。在这种情况下,模块可以在某个时间运行一个任务。

模块提供的唯一控制是等待多长时间运行任务。

type AppController struct { *revel.Controller }

func (c AppController) Action() revel.Result {
    // 处理请求
    ...

    // 立即发送电子邮件(异步)
    jobs.Now(SendConfirmationEmail{})

    // 或者,一分钟后发送电子邮件(异步)。
    jobs.In(time.Minute, SendConfirmationEmail{})
}

注册函数

通过使用jobs.Func类型包装一个func()函数,来注册一个任务。例如:

func sendReminderEmails() {
    // 查询数据库
    // 发送电子邮件
}

func init() {
    revel.OnAppStart(func() {
        jobs.Schedule("@midnight", jobs.Func(sendReminderEmails))
    })
}

任务状态

模块提供了一个状态页面,用来显示任务的运行状态(IDLE 或 RUNNING), 以及之前和下次运行时间。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)