Cron
小于 1 分钟componentcron
概述
gocron
是基于 cron封装的定时任务库。
本地计划任务
本地计划任务适用于单机环境,通常用于执行定期或延迟的后台作业,如数据清理、日志归档和本地缓存刷新,示例代码如下:
package main
import (
"fmt"
"time"
"github.com/go-dev-frame/sponge/pkg/gocron"
"github.com/go-dev-frame/sponge/pkg/logger"
)
var task1 = func() {
fmt.Println("this is task1")
fmt.Println("running task list:", gocron.GetRunningTasks())
}
var taskOnce = func() {
fmt.Println("this is task2, only run once")
fmt.Println("running task list:", gocron.GetRunningTasks())
}
func main() {
err := gocron.Init(
gocron.WithLogger(logger.Get()),
// gocron.WithLogger(logger.Get(), true), // only print error logs, ignore info logs
)
if err != nil {
panic(err)
}
gocron.Run([]*gocron.Task{
{
Name: "task1",
TimeSpec: "@every 2s",
Fn: task1,
},
{
Name: "taskOnce",
TimeSpec: "@every 3s",
Fn: taskOnce,
IsRunOnce: true, // run only once
},
}...)
time.Sleep(time.Second * 10)
// stop task1
gocron.DeleteTask("task1")
// view running tasks
fmt.Println("running task list:", gocron.GetRunningTasks())
}
分布式计划任务
分布式调度任务是为集群环境设计的,确保跨多个节点协调执行任务,避免重复调度,同时提高可靠性和可扩展性。
使用的库 asynq
实现,点击查看 Asynq 分布式调度任务示例代码。