gfast 后端开发-定时任务

2022-03-29 16:35 更新

在实际项目开发中Web应用有一类不可缺少的,那就是定时任务。 定时任务的场景可以说非常广泛,比如某些视频网站,购买会员后,每天会给会员送成长值,每月会给会员送一些电影券; 比如在保证最终一致性的场景中,往往利用定时任务调度进行一些比对工作;比如一些定时需要生成的报表、邮件;比如一些需要定时清理数据的任务等。 所以我们提供方便友好的web界面,实现动态管理任务,可以达到动态控制定时任务启动、暂停、重启、删除、添加、修改等操作,极大地方便了开发过程。

gfast 采用的是gf的gcron模块提供了对定时任务的实现,支持类似​crontab​的配置管理方式,并支持最小粒度到秒的定时任务管理。

使用方式

  • 后台添加定时任务处理的方法
  • 定时任务方法绑定在 ​./task/bind_function.go​ 文件

//定义一个无参测试任务 打印一个测试字符串
func Test1() {
    println("无参测试")
}

//带参数测试
func Test2() {
    //获取参数
    t := service.TimeTaskList.GetByName("test2")
    if t == nil {
        return
    }
    for _, v := range t.Param {
        fmt.Printf("参数:%s;  ", v)
    }
    fmt.Println()
}

  • 在初始化的时候绑定该方法

func init() {
    task1 := &service.TimeTask{
        FuncName: "test1",
        Run:      Test1,
    }
    task2 := &service.TimeTask{
        FuncName: "test2",
        Run:      Test2,
    }
    checkUserOnlineTask := &service.TimeTask{
        FuncName: "checkUserOnline",
        Run:      api.Auth.CheckUserOnline,
    }
    service.TimeTaskList.AddTask(task1).AddTask(task2)
    //自动执行已开启的任务
    jobs, err := service.SysJob.GetJobs()
    if err != nil {
        g.Log().Error(err)
    }
    for _, job := range jobs {
        service.SysJob.JobStart(job)
    }
}

  • 后台添加任务

m_e992d3f7dfbfdafb34b1fbd4e5d87ddc_r

  • 开启执行任务

m_0532fc6c3c7958273814238bad178238_r

每隔一秒钟可以看到控制台输出任务所打印的字符串:

m_eff9b6ce9becddf305b25f82929e8f1d_r

注意:此处用于测试所有把测试方法直接写在了​demo.go​文件中,正式使用的时候为了不让此文件过于混乱,可以把要执行的方法定义到其他文件或包下,直接绑定使用


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号