博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go Revel - Jobs(任务调度模块)
阅读量:6682 次
发布时间:2019-06-25

本文共 2286 字,大约阅读时间需要 7 分钟。

revel提供了一个框架用于脱离请求流程的执行异步任务,一般用来执行经常运行的任务、更新缓存数据或发送邮件等。 ##启用 该框架作为一个可选的revel模块,默认并不启用。需要更改应用配置来启用它: module.jobs = github.com/robfig/revel/modules/jobs 此外,为了访问任务监控页面,需要将下面添加至路由配置: module:jobs 这条语句将在路由配置中加入`/@jobs`地址 ##参数 一些选项告诉jobs框架在运行任务时应该具有什么样的限制,下面是默认值: jobs.pool = 10 # 允许同时执行多少个任务 jobs.selfconcurrent = false # 允许一个任务只有在前一个实例完成后才能运行 ##启动任务 使用`revel.OnAppStart`函数在程序开始运行时启动一个任务,revel将在启动服务器之前连续的运行这些任务。注意,此功能并不是用jobs模块,但是它可以用来提交一个jobs作业而不终端服务器的启动。 func init() { revel.OnAppStart(func() { jobs.Now(populateCache{}) }) } ##经常性的任务 任务可以被任何时间表调度,有两个方法来表示时间表: 1、一个cron表达式 2、一个固定的时间间隔 revel使用`cron`来处理cron表达式并执行任务,这里对`cron`的格式进行了详细的说明: https://github.com/robfig/cron/blob/master/README.md 任务通常在`revel.OnAppStart`处理器注册,但也可以在之后的任何时间来注册一个任务。 import ( "github.com/robfig/revel" "github.com/robfig/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`定义一个调度器,然后在任何地方引用它,这样有助于提供容易理解并且可重用的调度器。 在`app.conf`定义一个命名的调度器: cron.workhours_15m = 0 */15 9-17 ? * MON-FRI 在任何地方使用命名的调度器来设置cron描述表达式: func init() { revel.OnAppStart(func() { jobs.Schedule("cron.workhours_15m", ReminderEmails{}) }) } 注意,自定义的调度器名称必须以`cron.`开头。 ##一次性任务 有时,相应用户的请求需要做一些事,jobs模块允许提交一个单次执行的任务。 type AppController struct { *revel.Controller } func (c AppController) Action() revel.Result { // 处理请求. ... // 现在异步的发送邮件 jobs.Now(SendConfirmationEmail{}) //或者在单位时间之后再异步的发送邮件 jobs.In(time.Minute, SendConfirmationEmail{}) } ##注册函数 也可以将`func()`方式的函数使用`jobs.Func`类型包装并当作一个任务: func sendReminderEmails() { // 查询数据库 // 发送邮件 } func init() { revel.OnAppStart(func() { jobs.Schedule("@midnight", jobs.Func(sendReminderEmails)) }) } ##任务状态 jobs模块提供了一个状态页面用来显示所有的任务调度,以及它们的状态(IDLE 空闲 或 RUNNING 运行)还有它们上一次以及下一次的运行时间。 ![jobs](http://robfig.github.io/revel/img/jobs-status.png "jobs") 安全起见,只有请求来自`127.0.0.1`的时候,次页面才被显示。 ##受限的任务池 可以设置jobs任务池大小用来限制同一时间运行任务的数量,这可以允许开发人员限制异步任务所使用的资源 - 如果常规的交互响应权重高于异步处理。如果任务池中正在运行的任务满了,那么新的任务会被阻塞直到池中有任务完成。 ##开发相关 1、允许以HTTP基本的验证方式访问任务状态页面 2、允许系统管理员在任务状态页面以交互方式运行调度任务 3、为任务的运行提供能多的可视化效果,如池大小,队列长度

转载地址:http://wdxao.baihongyu.com/

你可能感兴趣的文章
PHP设计模式之构造器(Builder)
查看>>
2014年140个最好的jQuery插件集合
查看>>
资产-服务器变更流程图
查看>>
【Think社区】2013 PHP 技术峰会即将在上海举行
查看>>
Nginx常用Rewrite(伪静态)
查看>>
ubuntu端口 扫描和开启
查看>>
linux文件特殊权限及文件的访问控制列表
查看>>
centos6中安装consul
查看>>
js数组去重
查看>>
Shell ${} 变量使用技巧
查看>>
《北爱》的一点感想
查看>>
我的友情链接
查看>>
IOS动画与绘图
查看>>
Android图片压缩方法总结
查看>>
subprocess模块
查看>>
关于JasperReport打印多个和自动赋值解决办法
查看>>
分享14个超酷的视差滚动效果网站
查看>>
iptables防火墙的详解及使用;
查看>>
2016.4.26
查看>>
ansible变量三(注册变量和playbook的交互)
查看>>