Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/devfeel/dottask
Simple and easy go task framework, support loop & cron & queue
https://github.com/devfeel/dottask
cron express go loop task
Last synced: 2 months ago
JSON representation
Simple and easy go task framework, support loop & cron & queue
- Host: GitHub
- URL: https://github.com/devfeel/dottask
- Owner: devfeel
- License: mit
- Created: 2017-03-17T06:45:20.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2023-04-16T05:18:07.000Z (over 1 year ago)
- Last Synced: 2024-10-16T14:14:14.921Z (3 months ago)
- Topics: cron, express, go, loop, task
- Language: Go
- Homepage:
- Size: 90.8 KB
- Stars: 135
- Watchers: 10
- Forks: 22
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Devfeel/DotTask
简约大方的go-task组件
支持cron、loop、queue三种模式## 特性
* 支持配置方式(xml + json + yaml)与代码方式
* 支持cron、loop、queue三种模式
* cron模式支持“秒 分 时 日 月 周”配置
* loop模式支持毫秒级别
* queue模式支持毫秒级别
* 上次任务没有停止的情况下不触发下次任务
* 支持Exception、OnBegin、OnEnd注入点
* 支持单独执行TaskHandler
* 支持代码级重设Task的相关设置
* 支持超时控制
* 内建Task运行计数信息,包含执行与异常计数
* 内建针对Task与Counter的OutputHttpHandler,可方便与WebServer自动集成## 安装:
```
go get -u github.com/devfeel/dottask
```## 快速开始:
```go
package mainimport (
"fmt"
. "github.com/devfeel/dottask"
"time"
)var service *TaskService
func Job_Test(ctx *TaskContext) error {
fmt.Println(time.Now().String(), " => Job_Test")
//time.Sleep(time.Second * 3)
return nil
}func Loop_Test(ctx *TaskContext) error {
fmt.Println(time.Now().String(), " => Loop_Test")
time.Sleep(time.Second * 3)
return nil
}func main() {
//step 1: init new task service
service = StartNewService()//step 2: register task handler
_, err := service.CreateCronTask("testcron", true, "48-5 */2 * * * *", Job_Test, nil)
if err != nil {
fmt.Println("service.CreateCronTask error! => ", err.Error())
}
_, err = service.CreateLoopTask("testloop", true, 0, 1000, Loop_Test, nil)
if err != nil {
fmt.Println("service.CreateLoopTask error! => ", err.Error())
}//step 3: start all task
service.StartAllTask()fmt.Println(service.PrintAllTasks())
for {
time.Sleep(time.Hour)
}}
```
#### 配置方式
```gopackage main
import (
"fmt"
. "github.com/devfeel/dottask"
"time"
)var service *TaskService
func Job_Config(ctx *TaskContext) error {
fmt.Println(time.Now().String(), " => Job_Config")
//time.Sleep(time.Second * 3)
return nil
}func Loop_Config(ctx *TaskContext) error {
fmt.Println(time.Now().String(), " => Loop_Config")
time.Sleep(time.Second * 3)
return nil
}func RegisterTask(service *TaskService) {
service.RegisterHandler("Job_Config", Job_Config)
service.RegisterHandler("Loop_Config", Loop_Config)
}func main() {
//step 1: init new task service
service = StartNewService()//step 2: register all task handler
RegisterTask(service)//step 3: load config file
service.LoadConfig("d:\\task.conf")//step 4: start all task
service.StartAllTask()fmt.Println(service.PrintAllTasks())
for {
time.Sleep(time.Hour)
}
}```
#### task.xml.conf:
```
```
## 关于表达式
* 关于CronTask的TimeExpress 简单解释:
* 基本格式:* * * * * *(6列,以空格分隔)
* f1:第1列表示秒0-59,每一秒用*或*/1 表示。
* f2:第2列表示分钟0-59。
* f3:第3列表示小时0-23。
* f4:第4列表示日期1-31。
* f5:第5列表示月份1-12。
* f6:第6列表示星期几0-7,其中0和7均表示为周日。
* 当f1为 * 时表示每秒都要执行任务,f2为 * 时表示每分钟都要执行程序,其余类推
* 当f1为 a-b 时表示从第 a 秒钟到第 b 秒钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 分钟都要执行,其余类推
* 当f1为 */n 时表示每 n 秒钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
* 当f1为 a, b, c,... 时表示第 a, b, c,... 秒钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...分钟要执行,其余类推
#### 示例:
* #每天早上7点执行一次调度任务:
* 0 0 7 * * *
* #在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次调度任务:
* 0 0 6-12/3 * 12 *
* #周一到周五每天下午 5:00执行一次调度任务:
* 0 0 17 * * 1-5
* #每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行一次调度任务
* 0 20 0-23/2 * * *
* #每月每天的0 点 20 分, 9 点 20 分, 16 点 20 分执行一次调度任务
* 0 20 0,9,16 * * *## 外部依赖
yaml - https://gopkg.in/yaml.v2## 如何联系
QQ群:193409346