golang cron/v3 定时任务的简单运用

147 阅读1分钟

通过 cron 定义定时任务,一个定时任务负责发布任务,一个定时任务负责接收并处理,二者通过 channel 实现数据发收,代码见下:

package main

import (
   "fmt"
   "time"
   
   "github.com/robfig/cron/v3"
)

var tsChan chan int64

func init()  {
   tsChan = make(chan int64, 10)
}

func main() {
   cronJobs()
}

func cronJobs()  {
   c := cron.New()

   c.AddFunc("*/1 * * * *", cron.FuncJob(taskJob))
   c.AddFunc("*/2 * * * *", cron.FuncJob(workerJob))

   c.Start()
   time.Sleep(time.Hour)
}

func taskJob()  {
   fmt.Println(time.Now(), "每分钟发送1个时间戳")
   sendTs := time.Now().Unix()
   tsChan <- sendTs
   fmt.Printf("task send: %d\n", sendTs)
}

func workerJob()  {
   fmt.Println(time.Now(), "每2分钟接收1个时间处理")
   recvTs := <- tsChan
   fmt.Printf("worker recv: %d\n", recvTs)
}