taskrunner

package module
v0.0.0-...-81b43c4 Latest Latest
Warning

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

Go to latest
Published: Oct 1, 2024 License: MIT Imports: 5 Imported by: 0

README

简化版定时任务执行包(支持互斥组排队与优先级管理,简易日志输出,无数据库依赖)

采用了简易的日志处理器内存管理,使得包更加轻量且易于集成。该包提供给开发者一组安全、方便、功能强大且简洁的方法,便于集成到各种 Go 项目中,而无需额外的数据库配置。

目录

  1. 安装指南
  2. 项目结构
  3. 关键模块与代码示例
  4. 使用示例
  5. 常见问题
  6. 测试
  7. 总结
  8. 附录

安装指南

确保您已经安装了 Go 环境。

go get -u github.com/UserLeeZJ/taskrunner

项目结构

taskrunner/
├── executor.go          // 执行器模块,负责任务的调度与执行
├── registry.go          // 任务注册与管理模块
├── mutex.go             // 互斥组管理与排队逻辑
├── logger.go            // 日志管理模块
└── ...                  // 其他相关文件

常见问题

任务未按预期执行

原因:可能是任务的依赖关系未满足或任务已被标记为运行中。 解决方案

  • 确认所有依赖任务已正确注册并成功执行。
  • 检查任务是否被其他进程锁定,特别是在使用互斥组时。
任务执行超时

原因:任务的执行时间超过了设置的 MaxRunTimeSecs。 解决方案

  • 优化任务代码,减少执行时间。
  • 增加任务的 MaxRunTimeSecs 设置。
日志未输出

原因:未正确设置日志处理器,或日志级别过滤。 解决方案

  • 确认已正确设置日志处理器。
  • 检查日志处理器的实现,确保日志级别和输出路径正确。
任务优先级未生效

原因:任务优先级设置不正确,或优先级队列实现存在问题。 解决方案

  • 确认任务在注册时正确设置了 Priority 字段。
  • 检查优先级队列的实现,确保高优先级任务先被调度和执行。

测试taskrunner 包提供了全面的测试覆盖,确保各模块功能的稳定性。您可以使用以下命令运行测试:

bash go test ./...

测试覆盖了任务注册、调度、执行、依赖关系、互斥组管理以及日志输出等关键功能。

附录### 版权信息MIT © UserLeeZJ

贡献者名单感谢所有贡献者的辛勤工作:
贡献指南欢迎提交 Issue 和 Pull Request。

请确保遵循以下步骤:

  1. Fork 本仓库
  2. 创建您的特性分支 (git checkout -b feature/新特性)
  3. 提交您的更改 (git commit -m '添加新特性')
  4. 推送到分支 (git push origin feature/新特性)
  5. 创建一个新的 Pull Request请确保您的代码符合编码规范,并通过所有测试。
项目仓库 https://github.com/UserLeeZJ/taskrunner
License本项目采用 MIT License 许可协议。详情请参阅 LICENSE 文件。

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func InitializeDefaultLogHandler

func InitializeDefaultLogHandler()

InitializeDefaultLogHandler 初始化默认日志处理器(输出到控制台)

func LoadConfig

func LoadConfig(cfg Config)

LoadConfig 加载配置,确保只加载一次

func LogMessage

func LogMessage(taskID uint, level LogLevel, message string)

LogMessage 记录日志

func SetLogHandler

func SetLogHandler(handler LogHandler)

SetLogHandler 注册一个自定义日志处理器

Types

type Config

type Config struct {
	Workers int // 工作协程数
}

Config 配置结构体

func GetConfig

func GetConfig() *Config

GetConfig 获取配置实例

type Executor

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

Executor 任务执行器

func NewExecutor

func NewExecutor(ctx context.Context, registry *Registry, mutexMgr *MutexManager, workers int) *Executor

NewExecutor 创建新的 Executor

func (*Executor) ScheduleTasks

func (e *Executor) ScheduleTasks()

ScheduleTasks 开始定时调度任务

func (*Executor) Start

func (e *Executor) Start()

Start 启动执行器

func (*Executor) Stop

func (e *Executor) Stop()

Stop 停止执行器

type GroupQueue

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

GroupQueue 表示一个互斥组的任务队列

type LogHandler

type LogHandler func(taskID uint, level LogLevel, message string)

LogHandler 日志处理函数类型

func GetLogHandler

func GetLogHandler() LogHandler

GetLogHandler 获取当前的日志处理器

func NoOpLogHandler

func NoOpLogHandler() LogHandler

NoOpLogHandler 空操作日志处理器,不记录日志

type LogLevel

type LogLevel string

LogLevel 日志级别

const (
	INFO  LogLevel = "INFO"
	WARN  LogLevel = "WARN"
	ERROR LogLevel = "ERROR"
)

type MutexManager

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

MutexManager 管理互斥组的锁和队列

func NewMutexManager

func NewMutexManager() *MutexManager

NewMutexManager 创建一个新的 MutexManager

func (*MutexManager) Enqueue

func (m *MutexManager) Enqueue(group string, taskName string, execute func(), priority int)

Enqueue 将任务添加到互斥组队列

func (*MutexManager) Finish

func (m *MutexManager) Finish(group string)

Finish 设置互斥组的运行状态为完成,并尝试执行下一个任务

type Option

type Option func(*TaskRunner)

Option 定义一个函数类型,用于设置 TaskRunner 的选项

func WithLogHandler

func WithLogHandler(handler LogHandler) Option

WithLogHandler 设置自定义日志处理器

func WithWorkers

func WithWorkers(workers int) Option

WithWorkers 设置工作协程数

type PriorityQueue

type PriorityQueue []*TaskItem

PriorityQueue 实现 heap.Interface

func (PriorityQueue) Len

func (pq PriorityQueue) Len() int

func (PriorityQueue) Less

func (pq PriorityQueue) Less(i, j int) bool

func (PriorityQueue) Peek

func (pq PriorityQueue) Peek() *TaskItem

Peek 返回队列中优先级最高的任务

func (*PriorityQueue) Pop

func (pq *PriorityQueue) Pop() interface{}

func (*PriorityQueue) Push

func (pq *PriorityQueue) Push(x interface{})

func (PriorityQueue) Swap

func (pq PriorityQueue) Swap(i, j int)

type Registry

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

Registry 任务注册表

func NewRegistry

func NewRegistry() *Registry

NewRegistry 创建新的任务注册表

func (*Registry) Get

func (r *Registry) Get(name string) (TaskFunc, bool)

Get 获取任务函数

func (*Registry) GetTask

func (r *Registry) GetTask(name string) (*ScheduledTask, bool)

GetTask 获取任务详情

func (*Registry) List

func (r *Registry) List() []string

List 返回所有注册的任务名称

func (*Registry) Register

func (r *Registry) Register(name string, fn TaskFunc, intervalSecs, maxRunTimeSecs int, mutexGroup string, dependencies []string, priority int) error

Register 注册一个任务

type ScheduledTask

type ScheduledTask struct {
	ID             uint
	Name           string
	IntervalSecs   int
	MaxRunTimeSecs int
	IsActive       bool
	LastRunTime    *time.Time
	LastExecStatus string
	IsRunning      bool
	MutexGroup     string
	Dependencies   []string
	Priority       int // 新增字段,数值越大优先级越高
}

ScheduledTask 定时任务结构体

type TaskExecutionEntry

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

TaskExecutionEntry 任务执行条目

type TaskFunc

type TaskFunc func()

TaskFunc 任务函数类型

type TaskItem

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

TaskItem 包含任务名称和优先级

type TaskRunner

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

TaskRunner 定时任务运行器

func New

func New(options ...Option) (*TaskRunner, error)

New 创建新的 TaskRunner

func (*TaskRunner) RegisterTask

func (tr *TaskRunner) RegisterTask(name string, fn TaskFunc, intervalSecs, maxRunTimeSecs int, mutexGroup string, dependencies []string, priority int) error

RegisterTask 注册一个任务

func (*TaskRunner) RunTaskNow

func (tr *TaskRunner) RunTaskNow(name string, priority int) error

RunTaskNow 立即运行指定任务

func (*TaskRunner) SetLogHandler

func (tr *TaskRunner) SetLogHandler(handler LogHandler)

SetLogHandler 允许开发者设置自定义日志处理器

func (*TaskRunner) Stop

func (tr *TaskRunner) Stop()

Stop 停止 TaskRunner

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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