Dottask 使用指南
Dottask 是一个基于 Go 语言的简单易用的任务框架,支持循环(Loop)、定时(Cron)以及队列(Queue)三种任务模式。它允许通过配置文件(xml/json/yaml)或代码直接定义任务,并提供了丰富灵活的任务管理能力。
1. 项目目录结构及介绍
以下是 Dottask 开源项目的基本目录结构及其简介:
├── example # 示例代码目录,含快速启动示例
│ ├── main.go # 示例主程序入口
│ └── ...
├── config.go # 包含任务处理上下文等配置相关逻辑的文件
├── constant.go # 存放常量定义,如错误码等
├── context.go # 任务上下文定义
├── counter.go # 任务计数器相关实现
├── crontask.go # 定时任务相关逻辑
├── express.go # 表达式解析相关,用于Cron任务的时间表达式计算
├── express_test.go # Cron表达式的测试文件
├── logger.go # 日志处理逻辑
├── looptask.go # 循环任务逻辑实现
├── queuetask.go # 队列任务处理逻辑
├── taskinfo.go # 任务信息结构体定义
├── tasks.go # 任务集合操作相关函数
├── tasks_httphandler.go # 提供HTTP接口的Task处理器
├── LICENSE # 许可证文件
├── README.md # 项目说明文档
└── ...
- example: 包括快速上手的代码示例。
- config, constant, counter 等:核心功能模块,涉及配置、常量、计数器等功能实现。
- *.go: 各功能模块对应的Go文件,如任务类型的具体实现。
- LICENSE, README.md: 项目授权许可和使用说明文档。
2. 项目的启动文件介绍
通常,开发人员应从 example/main.go 文件入手来了解如何启动Dottask任务。以下是一个简化的快速开始示例,展示了如何创建并启动Cron和Loop任务:
package main
import (
"fmt"
"time"
"github.com/devfeel/dottask"
)
// 任务处理函数示例
func Job_Test(ctx *dottask.TaskContext) error {
fmt.Println(time.Now().String(), " => Job_Test")
// 可以添加具体任务逻辑
return nil
}
func Loop_Test(ctx *dottask.TaskContext) error {
fmt.Println(time.Now().String(), " => Loop_Test")
// 模拟延迟,实际应用中可以省略
time.Sleep(time.Second * 3)
return nil
}
func main() {
// 初始化任务服务
service := dottask.StartNewService()
// 创建并注册任务
if err := service.CreateCronTask("testcron", true, "48-5 */2 * * *", Job_Test, nil); err != nil {
fmt.Println("service CreateCronTask error => ", err.Error())
}
if err := service.CreateLoopTask("testloop", true, 0, 1000, Loop_Test, nil); err != nil {
fmt.Println("service CreateLoopTask error => ", err.Error())
}
// 启动所有任务
service.StartAllTask()
// 打印所有任务信息
fmt.Println(service.PrintAllTasks())
// 循环保持应用运行
for {
time.Sleep(time.Hour)
}
}
3. 项目的配置文件介绍
Dottask支持通过配置文件定义任务,支持XML、JSON、YAML格式。下面是一个配置文件(task.xml)的例子:
<xml version="1.0" encoding="UTF-8">
<config>
<global isrun="true" logpath="d:/"/>
<tasks>
<task taskid="Loop_Config" type="loop" isrun="true" duetime="10000" interval="10" handlername="Loop_Config"/>
<task taskid="Job_Config" type="cron" isrun="true" express="0 */5 * * * *" handlername="Job_Config"/>
</tasks>
</config>
- 配置文件示例:
<global>标签定义全局配置,如是否运行(isrun)和日志路径(logpath)。<tasks>包含具体的任务定义。- 每个
<task>任务标签中,需指定任务ID(taskid)、类型(type:cron/loop/queue)、是否启用(isrun)、执行时间或间隔等属性,以及关联的处理器名称(handlername)。
在代码中加载配置文件,可以通过调用类似 service.LoadConfig("d:\\task\\conf") 的方法完成。
通过上述步骤和配置,开发者能够轻松地配置和运行复杂的定时任务、循环任务和队列任务,适应各种自动化工作流的需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



