+
95
-

怎么用go快速实现一个极简任务调度系统?

怎么用go快速实现一个极简任务调度系统?


网友回复

+
15
-

任务调度(Task Scheduling)是很多软件系统中的重要组成部分,字面上的意思是按照一定要求分配运行一些通常时间较长的脚本或程序。在爬虫管理平台 Crawlab[1] 中,任务调度是其中的核心模块,相信不少朋友会好奇如何编写一个任务调度系统。本篇文章会教读者用 Go 语言编写一个非常简单的任务调度系统。

思路

我们首先理清一下思路,开发最小化任务调度器需要什么。

交互界面(API)

定时任务(Cron)

任务执行(Execute Tasks)

整个流程如下: 800_auto 我们通过 API 创建定时任务,执行器根据定时任务标准定期执行脚本。

实战

交互界面

首先我们来搭个架子。在项目目录下创建一个 main.go 文件,并输入以下内容。其中 gin 是非常流行的 Go 语言 API 引擎。
package main

import (
 "fmt"
 "github.com/gin-gonic/gin"
 "os"
)

func main() {
 // api engine
 app := gin.New()

 // api routes
 app.GET("/jobs", GetJobs)
 app.POST("/jobs", AddJob)
 app.DELETE("/jobs", DeleteJob)

 // run api on port 9092
  if err := app.Run(":9092"); err != nil {
  _, err = fmt.Fprintln(os.Stderr, err)
  os.Exit(1)
 }
}

然后添加 api.go 文件,输入以下内容,注意,这里没有任何代码实现,只是加入了占位区域。
package main

import "github.com/gin-gonic/gin"

func GetJobs(c *gin.Context) {
 // TODO: implementation here
}

func AddJob(c *gin.Context) {
 // TODO: implementation here
}

func DeleteJob(c *gin.Context) {
 // TODO: implementation here
}

定时任务

然后是任务调度的核心,定时任务。这里我们使用 robfig/cron[2],Go 语言比较流行的定时任务库。 现在创建 cron.go 文件,输入以下内容。其中 Cron 就是 robfig/cron 库中的 Cron 类生成的实例。
package main

import "github.com/robfig/cron"

func init() {
 // start to run
 Cron.Run()
}

// Cron create a new cron.Cron instance
var Cron = cron.New()

现在创建好了主要定时任务实例,就可以将核心逻辑添加在刚才的 API 占位区域了。 同样是 api.go ,将核心代码添加进来。
package main

import (
 "github.com/gin-gonic/gin"
 "github.com/robfig/cron/v3"
 "net/http"
 "strconv"
)

func GetJobs(c *gin.Context) {
 // return a list of cron job entries
 var results []map[string]interfa...

点击查看剩余70%

我知道答案,我要回答