task

package module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 16, 2025 License: Apache-2.0 Imports: 8 Imported by: 0

README

Gousing Task

介绍

开箱即用的 Gousing Task, 基于分片定时任务队列调度器进行管理,提供全局默认任务管理器, 支持状态监控和管理,支持多种任务类型,包含定时模式/延迟模式/周期模式, 支持运行册数限制和超时控制。

无依赖,不使用Cron表达式语法,提供直接语义化接口,如:

定时模式

  • OnceAt 创建一次性定时任务(基于一个明确时间)

定时模式

  • OnceAfter 创建一次性延迟任务(基于一个延迟时间)
  • OnceBuffer 创建一次性延迟任务(缓冲模式), 常用于延迟更新任务, 如缓存更新等场景

周期模式

  • EveryInterval 创建周期性任务,基于一个明确的间隔时间 interval
  • EverySecond 创建周期性任务(每几秒钟运行一次)
  • EveryMinute 创建周期性任务(每几分钟运行一次)
  • EveryHour 创建周期性任务(每几小时运行一次)
  • EveryDay 创建周期性任务(每几天运行一次)
  • EveryWeekDay 创建周期性任务(每周几运行一次)
  • EveryMonthDay 创建周期性任务(每月的某一日运行一次)
  • EveryMonthFirstDay 创建周期性任务(每月第1天运行一次)
  • EveryMonthLastDay 创建周期性任务(每月最后一天运行一次)

添加任务时,支持更细定时控制和超时控制

  • WithStartAt 设置任务开始的时间(默认为Now)
  • WithHour 设置任务时刻:时 (默认为当前小时)
  • WithMinute 设置任务时刻:分 (默认为当前分钟)
  • WithSecond 设置任务时刻:秒 (默认为当前秒)
  • WithMillisecond 设置任务时刻:毫秒 (默认为当前毫秒)
  • WithTimeout 设置任务执行超时时间(默认为0, 即不限制)
  • WithRunMax 设置任务执行最大次数(周期任务有效, 默认为0, 即不限制)
安装
go get -u gitee.com/gousing/task
使用

开箱即用, 全局默认任务管理器

import "gitee.com/gousing/task"
// Global 获取全局默认任务管理器
// task.GetGlobal() *TaskManager
// task.SetGlobal(*TaskManager)
// OnceAt 创建一次性定时任务(基于一个明确时间)
//   - executeAt 调度器内部会统一转换为本地时区后处理,如已过期则调整为当前时间(立即执行)
//   - ops 可通过 TaskOption 指定任务运行的超时时间: WithTimeout
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
task.OnceAt(key string, executeAt time.Time, handler TaskHandler, ops ...TaskOption) error
// 一小时后运行,超时设置为 1s
task.OnceAt("key", time.Now().Add(time.Hour), func() error {
		return nil
}, WithTimeout(time.Second))
// EveryInterval 创建周期性任务,基于一个明确的间隔时间 interval
//   - ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
task.EveryInterval(key string, interval time.Duration, handler TaskHandler, ops ...TaskOption) error
// 每秒钟运行一次, 一直重复直到任务被删除
task.EveryInterval("key", time.Second, func() error {
		return nil
})
// 每秒钟运行一次, 运行100次
task.EveryInterval("key", time.Second, func() error {
		return nil
}, WithRunMax(100))
// 更多接口见 TaskManagerIO

自定义任务管理器

import "gitee.com/gousing/task"
// NewTaskManager 创建一个新任务管理器
//   - name string   管理器名称
//   - options *Options  配置选项
//   - type Options struct {
//   - 	ShardCount  int           // 任务队列存储分片数量,  默认 32, 最小 1, 最大 512
//   - 	WorkerCount int           // 任务处理协程数量, 默认 2048, 最小 1, 最大 262144
//   - 	CheckPeriod time.Duration // 任务队列检查最小时间,决定了定时任务定时/间隔精度, 默认 10 毫秒, 最小 1毫秒, 最大 1000毫秒(1秒)
//   - }
func NewTaskManager(name string, options *Options) *TaskManager

myTask := task.NewTaskManager("MyTask",&options{ShardCount:32,WorkerCount:2048,CheckPeriod:10*time.Millisecond})
// OnceAt 创建一次性定时任务(基于一个明确时间)
//   - executeAt 调度器内部会统一转换为本地时区后处理,如已过期则调整为当前时间(立即执行)
//   - ops 可通过 TaskOption 指定任务运行的超时时间: WithTimeout
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
myTask.OnceAt(key string, executeAt time.Time, handler TaskHandler, ops ...TaskOption) error
// 更多接口见 TaskManagerIO
TaskManagerIO

注意:如未设置超时时间, 默认任务执行超时时间为30秒

// OnceAt 创建一次性定时任务(基于一个明确时间)
//   - executeAt 调度器内部会统一转换为本地时区后处理,如已过期则调整为当前时间(立即执行)
//   - ops 可通过 TaskOption 指定任务运行的超时时间: WithTimeout
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
OnceAt(key string, executeAt time.Time, handler TaskHandler, ops ...TaskOption) error

// OnceAfter 创建一次性延迟任务(基于一个延迟时间)
//   - ops 可通过 TaskOption 指定任务运行的开始时间: WithStartAt  超时时间: WithTimeout 等
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
OnceAfter(key string, delay time.Duration, handler TaskHandler, ops ...TaskOption) error
// OnceBuffer 创建一次性延迟任务(缓冲模式), 常用于延迟更新任务, 如缓存更新等场景
//   - ops 可通过 TaskOption 指定任务运行的开始时间: WithStartAt  超时时间: WithTimeout 等
//   - 注意:任务添加后/执行前相同Key任务的添加操作将会忽略
OnceBuffer(key string, delay time.Duration, handler TaskHandler, ops ...TaskOption) error 
// EveryInterval 创建周期性任务,基于一个明确的间隔时间 interval
//   - ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
EveryInterval(key string, interval time.Duration, handler TaskHandler, ops ...TaskOption) 
// EverySecond 创建周期性任务(每几秒钟运行一次)
//   - ops 可通过 TaskOption 指定具体的具体运行时刻: WithMillisecond
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
EverySecond(key string, seconds int, handler TaskHandler, ops ...TaskOption) error 

// EveryMinute 创建周期性任务(每几分钟运行一次)
//   - ops 可通过 TaskOption 指定具体的具体运行时刻:WithSecond WithMillisecond
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
EveryMinute(key string, minutes int, handler TaskHandler, ops ...TaskOption) error

// EveryHour 创建周期性任务(每几小时运行一次)
//   - ops 可通过 TaskOption 指定具体的具体运行时刻:WithMinute WithSecond WithMillisecond
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
EveryHour(key string, hours int, handler TaskHandler, ops ...TaskOption) error

// EveryDay 创建周期性任务(每几天运行一次)
//   - ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
EveryDay(key string, days int, handler TaskHandler, ops ...TaskOption) error 

// EveryWeekDay 创建周期性任务(每周X运行一次)
//   - weekDay 0-7, 0/7 => 星期日
//   - ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
EveryWeekDay(key string, weekDay int, handler TaskHandler, ops ...TaskOption) error
// EveryMonthDay 创建周期性任务(每月的某一日运行一次)
//   - day: 1-31, 如指定31号,但当月只有30天,则30日执行
//   - ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
EveryMonthDay(key string, day int, handler TaskHandler, ops ...TaskOption) error
// EveryMonthFirstDay 创建周期性任务(每月第1天运行一次)
//   - ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
EveryMonthFirstDay(key string, handler TaskHandler, ops ...TaskOption) error
// EveryMonthLastDay 创建周期性任务(每月最后一天运行一次)
//   - ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
//   - 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务
EveryMonthLastDay(key string, handler TaskHandler, ops ...TaskOption) error
// Remove 删除指定key的任务
RemoveTask(keys ...string) error
// RemoveAllTasks 删除所有任务
RemoveAllTasks() error
// GetTask 获取指定key的定时任务
GetTask(key string) (TaskInfo, error)
// GetAllTasks 获取所有定时任务信息
GetAllTasks() ([]TaskInfo, error)
// Size 获取定时任务数量(包含未运行、已运行的全部任务)
//   - 包含全部定时任务的映射(可主动通过RemoveTask删除指定任务信息)
Size() int
// IsRuning 获取定时任务管理器运行状态
IsRuning() bool
// Monitor 获取定时任务运行监控信息
Monitor() TaskMonitorData
// Stop 关闭定时任务管理器
//   - 注意:仅停止定时任务管理器的运行,不会删除任务数据
Stop() error
// Restart 重启定时任务管理器
//   - 注意:重启后,所有到期任务会立即运行
Restart()
Test Benchmark

Test 全包测试需要设置下超时,以完成任务执行测试

go.exe test -timeout 60s -run ^Test* gitee.com/gousing/task -v

Benchmark

go.exe test -benchmem -run=^$ -bench ^Benchmark* gitee.com/gousing/task -v
goos: windows
goarch: amd64
pkg: gitee.com/gousing/task
cpu: 12th Gen Intel(R) Core(TM) i5-12400F
Benchmark - - - -
BenchmarkTaskManager_1S_16P 1000000 1164 ns/op 524 B/op 4 allocs/op
BenchmarkTaskManager_3S_96P 1000000 1129 ns/op 462 B/op 4 allocs/op
BenchmarkTaskManager_32S_2048P_Default 1000000 1153 ns/op 521 B/op 4 allocs/op
BenchmarkTaskManager_64S_4096P 1000000 1213 ns/op 517 B/op 4 allocs/op
Gousing 通用选项
自定义 Logger
// 默认使用Golang标准库slog.Default()全局日志记录日志
// task.SetLogger(*slog.Logger)
myLogger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
task.SetLogger(myLogger)

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// Task 数据指针为空
	ErrTaskIsNil = errors.New("task is nil")
	// Task Key 不能为空
	ErrTaskKeyEmpty = errors.New("task key is empty")
	// Task Key 不存在
	ErrTaskKeyNotExist = errors.New("task key not exist")
	// Task Handler 不能为空
	ErrTaskHandlerNil = errors.New("task handler is nil")
	// Task 执行时间无效
	ErrTaskExecuteAt = errors.New("task execute time is invalid")
	// Task 执行周期无效
	ErrTaskInterval = errors.New("task interval is invalid")
	// Task 已取消
	ErrTaskCancelled = errors.New("task is cancelled")
	// Task 已关闭
	ErrTaskClosed = errors.New("task is closed")
)

Functions

func EveryDay

func EveryDay(key string, days int, handler TaskHandler, ops ...TaskOption) error

EveryDay 创建周期性任务(每几天运行一次)

  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func EveryHour

func EveryHour(key string, hours int, handler TaskHandler, ops ...TaskOption) error

EveryHour 创建周期性任务(每几小时运行一次)

  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func EveryInterval

func EveryInterval(key string, interval time.Duration, handler TaskHandler, ops ...TaskOption) error

EveryInterval 创建周期性任务,基于一个明确的间隔时间 interval

  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func EveryMinute

func EveryMinute(key string, minutes int, handler TaskHandler, ops ...TaskOption) error

EveryMinute 创建周期性任务(每几分钟运行一次)

  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func EveryMonthDay

func EveryMonthDay(key string, day int, handler TaskHandler, ops ...TaskOption) error

EveryMonthDay 创建周期性任务(每月的某一日运行一次)

  • day: 1-31, 如指定31号,但当月只有30天,则30日执行
  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func EveryMonthFirstDay

func EveryMonthFirstDay(key string, handler TaskHandler, ops ...TaskOption) error

EveryMonthFirstDay 创建周期性任务(每月第1天运行一次)

  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func EveryMonthLastDay

func EveryMonthLastDay(key string, handler TaskHandler, ops ...TaskOption) error

EveryMonthLastDay 创建周期性任务(每月最后一天运行一次)

  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func EverySecond

func EverySecond(key string, seconds int, handler TaskHandler, ops ...TaskOption) error

EverySecond 创建周期性任务(每几秒钟运行一次)

  • ops 可通过 TaskOption 指定具体的具体运行时刻: WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func EveryWeekDay

func EveryWeekDay(key string, weekDay int, handler TaskHandler, ops ...TaskOption) error

EveryWeekDay 创建周期性任务(每周X运行一次)

  • weekDay 0-7, 0/7 => 星期日
  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func GetLogger

func GetLogger() *slog.Logger

func IsRuning

func IsRuning() bool

IsRuning 获取定时任务队列运行状态

func OnceAfter

func OnceAfter(key string, delay time.Duration, handler TaskHandler, ops ...TaskOption) error

OnceAfter 创建一次性延迟任务(基于一个延迟时间)

  • ops 可通过 TaskOption 指定任务运行的开始时间: WithStartAt 超时时间: WithTimeout 等
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func OnceAt

func OnceAt(key string, executeAt time.Time, handler TaskHandler, ops ...TaskOption) error

OnceAt 创建一次性定时任务(基于一个明确时间)

  • executeAt 调度器内部会统一转换为本地时区后处理,如已过期则调整为当前时间(立即执行)
  • ops 可通过 TaskOption 指定任务运行的超时时间: WithTimeout
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func OnceBuffer

func OnceBuffer(key string, delay time.Duration, handler TaskHandler, ops ...TaskOption) error

OnceBuffer 创建一次性延迟任务(缓冲模式), 常用于延迟更新任务, 如缓存更新等场景

  • ops 可通过 TaskOption 指定任务运行的开始时间: WithStartAt 超时时间: WithTimeout 等
  • 注意:任务添加后/执行前相同Key任务的添加操作将会忽略

func RemoveAllTasks

func RemoveAllTasks() error

RemoveTask 删除所有任务

func RemoveTask

func RemoveTask(keys ...string) error

RemoveTask 删除指定key的任务

func Restart

func Restart()

Restart 重启定时任务管理器

  • 注意:重启后,队列中如有任务,所有到期任务会立即运行

func SetGlobal

func SetGlobal(tm *TaskManager)

SetGlobal 设置全局默认任务管理器

func SetLogger

func SetLogger(log *slog.Logger)

func Size

func Size() int

Size 获取定时任务数量(包含未运行、已运行的全部任务)

  • 包含全部定时任务的映射(可主动通过RemoveTask删除指定任务信息)

func Stop

func Stop()

Stop 关闭定时任务管理器

  • 注意:仅停止定时任务管理器的运行,不会删除任务数据

func TaskStateString

func TaskStateString(s TaskState) string

Types

type Options

type Options struct {
	ShardCount  int           // 任务队列存储分片数量,  默认 32, 最小 1, 最大 512
	WorkerCount int           // 任务处理协程数量, 默认 2048, 最小 1, 最大 262144
	CheckPeriod time.Duration // 任务队列检查最小时间,决定了定时任务定时/间隔精度, 默认 10 毫秒, 最小 1毫秒, 最大 1000毫秒(1秒)
}

type Task

type Task struct {
	// contains filtered or unexported fields
}

Task 定时任务信息(含运行调度状态信息)

type TaskHandler

type TaskHandler func() error

TaskHandler 任务控制器

type TaskInfo

type TaskInfo struct {
	Key           string
	IsOnce        bool          // 是否为一次性任务
	IsBuffer      bool          // 是否为一次性任务(缓冲模式),任务首次添加后/运行前将会忽略相同Key任务的添加操作
	RunMax        int32         // 任务最多运行次数(周期任务有效)
	RunCount      int32         // 任务已运行次数
	Timeout       time.Duration // 任务执行超时时间(未定义时默认为60秒)
	LastState     TaskState     // 任务最近一次状态结果状态
	LastRunAt     time.Time     // 任务最近一次运行时间
	LastConsuming time.Duration // 任务最近一次运行耗时
	LastError     error         // 任务最近一次运行错误
}

TaskInfo 定时任务基本信息(含运行状态信息)

func GetAllTasks

func GetAllTasks() []TaskInfo

GetAllTasks 获取所有定时任务

func GetTask

func GetTask(key string) (TaskInfo, error)

GetTask 获取指定key的定时任务信息

func (TaskInfo) String

func (s TaskInfo) String() string

type TaskManager

type TaskManager struct {
	// contains filtered or unexported fields
}

TaskManager 定时任务管理器

func GetGlobal

func GetGlobal() *TaskManager

GetGlobal 获取全局默认任务管理器

func NewTaskManager

func NewTaskManager(name string, options *Options) *TaskManager

NewTaskManager 创建一个新的定时任务管理器

  • name string 管理器名称
  • options *Options 配置选项
  • type Options struct {
  • ShardCount int // 任务队列存储分片数量, 默认 32, 最小 1, 最大 512
  • WorkerCount int // 任务处理协程数量, 默认 2048, 最小 1, 最大 262144
  • CheckPeriod time.Duration // 任务队列检查最小时间,决定了定时任务定时/间隔精度, 默认 10 毫秒, 最小 1毫秒, 最大 1000毫秒(1秒)
  • }

func (*TaskManager) EveryDay

func (ts *TaskManager) EveryDay(key string, days int, handler TaskHandler, ops ...TaskOption) error

EveryDay 创建周期性任务(每几天运行一次)

  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func (*TaskManager) EveryHour

func (ts *TaskManager) EveryHour(key string, hours int, handler TaskHandler, ops ...TaskOption) error

EveryHour 创建周期性任务(每几小时运行一次)

  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func (*TaskManager) EveryInterval

func (ts *TaskManager) EveryInterval(key string, interval time.Duration, handler TaskHandler, ops ...TaskOption) error

EveryInterval 创建周期性任务,基于一个明确的间隔时间 interval

  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func (*TaskManager) EveryMinute

func (ts *TaskManager) EveryMinute(key string, minutes int, handler TaskHandler, ops ...TaskOption) error

EveryMinute 创建周期性任务(每几分钟运行一次)

  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func (*TaskManager) EveryMonthDay

func (ts *TaskManager) EveryMonthDay(key string, day int, handler TaskHandler, ops ...TaskOption) error

EveryMonthDay 创建周期性任务(每月的某一日运行一次)

  • day: 1-31, 如指定31号,但当月只有30天,则30日执行
  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func (*TaskManager) EveryMonthFirstDay

func (ts *TaskManager) EveryMonthFirstDay(key string, handler TaskHandler, ops ...TaskOption) error

EveryMonthFirstDay 创建周期性任务(每月第1天运行一次)

  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func (*TaskManager) EveryMonthLastDay

func (ts *TaskManager) EveryMonthLastDay(key string, handler TaskHandler, ops ...TaskOption) error

EveryMonthLastDay 创建周期性任务(每月最后一天运行一次)

  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func (*TaskManager) EverySecond

func (ts *TaskManager) EverySecond(key string, seconds int, handler TaskHandler, ops ...TaskOption) error

EverySecond 创建周期性任务(每几秒钟运行一次)

  • ops 可通过 TaskOption 指定具体的具体运行时刻: WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func (*TaskManager) EveryWeekDay

func (ts *TaskManager) EveryWeekDay(key string, weekDay int, handler TaskHandler, ops ...TaskOption) error

EveryWeekDay 创建周期性任务(每周几运行一次)

  • weekDay 0-7, 0/7 => 星期日
  • ops 可通过 TaskOption 指定具体的具体运行时刻:WithHour WithMinute WithSecond WithMillisecond
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func (*TaskManager) GetAllTasks

func (ts *TaskManager) GetAllTasks() []TaskInfo

GetAllTasks 获取所有定时任务信息

func (*TaskManager) GetTask

func (ts *TaskManager) GetTask(key string) (TaskInfo, error)

GetTask 获取指定key的定时任务信息

func (*TaskManager) IsRuning

func (ts *TaskManager) IsRuning() bool

IsRuning 获取定时任务管理器运行状态

func (*TaskManager) Monitor

func (ts *TaskManager) Monitor() TaskMonitorData

Monitor 获取定时任务运行监控信息

func (*TaskManager) OnceAfter

func (ts *TaskManager) OnceAfter(key string, delay time.Duration, handler TaskHandler, ops ...TaskOption) error

OnceAfter 创建一次性延迟任务(基于一个延迟时间)

  • ops 可通过 TaskOption 指定任务运行的开始时间: WithStartAt 超时时间: WithTimeout 等
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func (*TaskManager) OnceAt

func (ts *TaskManager) OnceAt(key string, executeAt time.Time, handler TaskHandler, ops ...TaskOption) error

OnceAt 创建一次性定时任务(基于一个明确时间)

  • executeAt 调度器内部会统一转换为本地时区后处理,如已过期则调整为当前时间(立即执行)
  • ops 可通过 TaskOption 指定任务运行的超时时间: WithTimeout
  • 注意:任务添加后/执行前相同Key任务的添加操作会直接覆盖前一次添加的任务

func (*TaskManager) OnceBuffer

func (ts *TaskManager) OnceBuffer(key string, delay time.Duration, handler TaskHandler, ops ...TaskOption) error

OnceBuffer 创建一次性延迟任务(缓冲模式), 常用于延迟更新任务, 如缓存更新等场景

  • ops 可通过 TaskOption 指定任务运行的开始时间: WithStartAt 超时时间: WithTimeout 等
  • 注意:任务添加后/执行前相同Key任务的添加操作将会忽略

func (*TaskManager) RemoveAllTasks

func (ts *TaskManager) RemoveAllTasks() error

RemoveAllTasks 删除所有任务

func (*TaskManager) RemoveTask

func (ts *TaskManager) RemoveTask(keys ...string) error

RemoveTask 移除指定任务

func (*TaskManager) Restart

func (ts *TaskManager) Restart()

Restart 重启定时任务管理器

  • 注意:重启后,所有到期任务会立即运行

func (*TaskManager) Size

func (ts *TaskManager) Size() int

Size 获取定时任务数量(包含未运行、已运行的全部任务)

  • 包含全部定时任务的映射(可主动通过RemoveTask删除指定任务信息)

func (*TaskManager) Stop

func (ts *TaskManager) Stop()

Stop 关闭定时任务管理器

  • 注意:仅停止定时任务管理器的运行,不会删除任务数据

type TaskMonitorData

type TaskMonitorData struct {
	AddedCount      int64         `json:"added_count,string"`   // 添加任务的累计次数
	TimeoutCount    int64         `json:"timeout_count,string"` // 执行超时累计次数
	FailCount       int64         `json:"fail_count,string"`    // 执行失败累计次数
	FinishCount     int64         `json:"finish_count,string"`  // 执行完成累计次数
	AvgConsuming    time.Duration `json:"avg_consuming,string"` // 执行平均耗时
	MaxConsuming    time.Duration `json:"max_consuming,string"` // 执行最长耗时
	MaxConsumingKey string        `json:"max_consuming_key"`    // 执行最长耗时的任务Key
	IsRuning        bool          `json:"is_runing"`
}

func Monitor

func Monitor() TaskMonitorData

Monitor 获取任务运行监控信息

type TaskOption

type TaskOption func(*taskOption)

func WithHour

func WithHour(hour int) TaskOption

WithHour 设置任务时刻:时 (默认为当前小时)

func WithMillisecond

func WithMillisecond(millisecond int) TaskOption

WithMillisecond 设置任务时刻:毫秒 (默认为当前毫秒)

func WithMinute

func WithMinute(minute int) TaskOption

WithMinute 设置任务时刻:分 (默认为当前分钟)

func WithRunMax

func WithRunMax(v int) TaskOption

WithRunMax 设置任务最大执行次数 (默认为0:不限制)

func WithSecond

func WithSecond(second int) TaskOption

WithSecond 设置任务时刻:秒 (默认为当前秒)

func WithStartAt

func WithStartAt(at time.Time) TaskOption

WithStartAt 设置任务开始的时间(默认为Now)

func WithTimeout

func WithTimeout(v time.Duration) TaskOption

WithTimeout 设置任务执行超时时间 (默认为30秒)

type TaskState

type TaskState = int32

TaskState 任务状态

const (
	TaskStatePending  TaskState = iota // 任务状态: 待执行
	TaskStateRunning                   // 任务状态: 正在执行中
	TaskStateTimeout                   // 任务状态: 执行超时
	TaskStateFailed                    // 任务状态: 执行失败
	TaskStateRemoved                   // 任务状态: 已删除
	TaskStateFinished                  // 任务状态: 已完成
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL