短时任务Job

背景

通常我们有许多程序是短时任务,执行一下就结束。这种场景通常有以下两种方式:

  • 执行某个一次性任务,例如:执行程序的安装,或者mock数据
  • 将生命周期托管给例如k8s job或者xxljob,由他们控制job的执行时间

Example

项目地址短时任务Job - 图1 (opens new window)

用户代码

如果命令行参数里有 --job ,那么框架会优先执行这个 job,停止所有的 servercronjob 可以执行一个,也可以执行多个。执行一个方式 --job=jobname ,执行多个方式,用逗号分割 jobname,例如: --job=jobname1,jobname2,jobname3

  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/ejob"
  8. "go.uber.org/zap"
  9. )
  10. // export EGO_DEBUG=true && go run main.go --job=jobrunner
  11. func main() {
  12. if err := ego.New().Job(NewJobRunner()).Run(); err != nil {
  13. elog.Error("start up", zap.Error(err))
  14. }
  15. }
  16. func NewJobRunner() *ejob.Component {
  17. return ejob.DefaultContainer().Build(
  18. ejob.WithName("jobrunner"),
  19. ejob.WithStartFunc(runner),
  20. )
  21. }
  22. func runner() error {
  23. fmt.Println("i am job runner")
  24. return errors.New("i am error")
  25. }