定时任务Cron

1 Example

项目地址定时任务Cron - 图1 (opens new window) ego版本:ego@v0.3.11

2 定时任务配置

  1. type Config struct {
  2. WaitLockTime time.Duration // 抢锁等待时间,默认60s
  3. LockTTL time.Duration // 租期,默认60s
  4. LockDir string // 定时任务锁目录
  5. RefreshTTL time.Duration // 刷新ttl,默认60s
  6. WaitUnlockTime time.Duration // 抢锁等待时间,默认1s
  7. DelayExecType string // skip,queue,concurrent,如果上一个任务执行较慢,到达了新的任务执行时间,那么新的任务选择跳过,排队,并发执行的策略
  8. EnableDistributedTask bool // 是否分布式任务,默认否,如果存在分布式任务,会只执行该定时人物
  9. EnableImmediatelyRun bool // 是否立刻执行,默认否
  10. EnableWithSeconds bool // 是否使用秒作解析器,默认否
  11. }

3 常规定时任务

3.1 用户配置

  1. [cron.test]
  2. enableDistributedTask = false # 是否分布式任务,默认否,如果存在分布式任务,会只执行该定时人物
  3. enableImmediatelyRun = false # 是否立刻执行,默认否
  4. enableWithSeconds = false # 是否使用秒作解析器,默认否
  5. delayExecType = "skip" # skip,queue,concurrent,如果上一个任务执行较慢,到达了新任务执行时间,那么新任务选择跳过,排队,并发执行的策略,新任务默认选择skip策略

3.2 用户代码

配置创建一个 的配置项,其中内容按照上文HTTP的配置进行填写。以上这个示例里这个配置key是cron.test

代码中创建一个 cron 服务, ecron.Load(“”).Build() ,代码中的 key 和配置中的 key 。创建完 cron 后, 将他添加到 ego new 出来应用的 Schedule 方法中。

  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/gotomicro/ego"
  6. "github.com/gotomicro/ego/core/elog"
  7. "github.com/gotomicro/ego/task/ecron"
  8. "time"
  9. )
  10. // export EGO_DEBUG=true && go run main.go --config=config.toml
  11. func main() {
  12. err := ego.New().Cron(cron1()).Run()
  13. if err != nil {
  14. elog.Panic("startup engine", elog.Any("err", err))
  15. }
  16. }
  17. func cron1() ecron.Ecron {
  18. cron := ecron.Load("cron.test").Build()
  19. cron.Schedule(ecron.Every(time.Second*10), ecron.FuncJob(execJob))
  20. cron.Schedule(ecron.Every(time.Second*10), ecron.FuncJob(execJob2))
  21. return cron
  22. }
  23. // 异常任务
  24. func execJob() error {
  25. elog.Info("info job")
  26. elog.Warn("warn job")
  27. fmt.Println("run job")
  28. return errors.New("exec job1 error")
  29. }
  30. // 正常任务
  31. func execJob2() error {
  32. elog.Info("info job2")
  33. elog.Warn("warn job2")
  34. fmt.Println("run job2")
  35. return nil
  36. }

4 分布式定时任务

4.1 用户配置

  1. [cron.test]
  2. enableDistributedTask = true # 是否分布式任务,默认否,如果存在分布式任务,会只执行该定时人物
  3. enableImmediatelyRun = false # 是否立刻执行,默认否
  4. enableWithSeconds = false # 是否使用秒作解析器,默认否
  5. delayExecType = "skip" # skip,queue,concurrent,如果上一个任务执行较慢,到达了新任务执行时间,那么新任务选择跳过,排队,并发执行的策略,新任务默认选择skip策略

4.2 用户代码

配置创建一个 的配置项,其中内容按照上文HTTP的配置进行填写。以上这个示例里这个配置key是cron.test

代码中创建一个 cron 服务, ecron.Load(“”).Build() ,代码中的 key 和配置中的 key 。创建完 cron 后, 将他添加到 ego new 出来应用的 Schedule 方法中。

  1. package main
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/gotomicro/ego"
  6. "github.com/gotomicro/ego/core/elog"
  7. "github.com/gotomicro/ego/task/ecron"
  8. "time"
  9. )
  10. // export EGO_DEBUG=true && go run main.go --config=config.toml
  11. func main() {
  12. err := ego.New().Cron(cron1()).Run()
  13. if err != nil {
  14. elog.Panic("startup engine", elog.Any("err", err))
  15. }
  16. }
  17. func cron1() ecron.Ecron {
  18. lock := ecronlock.Load("").Build(ecronlock.WithClientRedis(invoker.Redis))
  19. cron := ecron.Load("cron.test").Build(ecron.WithLocker(lock))
  20. cron.Schedule(ecron.Every(time.Second*10), ecron.FuncJob(execJob))
  21. return cron
  22. }
  23. func execJob() error {
  24. elog.Info("info job")
  25. elog.Warn("warn job")
  26. fmt.Println("run job")
  27. return errors.New("exec job1 error")
  28. }