当前位置:K88软件开发文章中心网站服务器框架Revel → 文章内容

Revel 计划任务

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-25 14:27:07

由 jinlunxue 创建,路飞 最后一次修改 2016-02-24 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{}) })}周期性任务任务可以被指定在任意时间运行。使用的时间表有两个选项:一个cron时间格式固定时间间隔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), 以及之前和下次运行时间。

Revel 计划任务