增加任务调度, 任务执行待完成

This commit is contained in:
白茶清欢 2022-06-23 15:33:29 +08:00
parent bd9dce43c1
commit eb9cb4b6e2
3 changed files with 92 additions and 7 deletions

View File

@ -22,5 +22,5 @@ type ITask interface {
// Callback 任务执行的回调
Callback(result *Result) error
// Execute 执行任务
Execute(ctx context.Context, cfg *Config, taskParam map[string]interface{}) (map[string]interface{}, error)
Execute(ctx context.Context, cfg *Config) (map[string]interface{}, error)
}

View File

@ -13,6 +13,8 @@ package task
//
// Date : 14:26 2022/6/23
type Config struct {
// TaskName 执行的任务名称
TaskName string
// GetRunID 获取任务运行的ID
GetRunID func() string
// Async 是否异步运行
@ -21,6 +23,8 @@ type Config struct {
Timeout int
// ForbiddenCallback 禁用执行结果回调
ForbiddenCallback bool
// Param 任务执行参数
Param map[string]interface{}
}
// Result 执行结果
@ -29,10 +33,14 @@ type Config struct {
//
// Date : 14:43 2022/6/23
type Result struct {
StartTime int64 // 开始时间, 纳秒
FinishTime int64 // 结束时间, 纳秒
Used int64 // 耗时, 纳秒
Param map[string]interface{} // 任务参数
Data map[string]interface{} // 任务结果数据
Err error // 异常信息, err == nil , 代表执行成功
StartTime int64 // 开始时间, 纳秒
FinishTime int64 // 结束时间, 纳秒
Used int64 // 耗时, 纳秒
TaskRunID string // 任务运行ID
TaskDescription string // 任务描述
TaskConfig *Config // 任务配置
Async bool // 是否异步
Param map[string]interface{} // 任务参数
Data map[string]interface{} // 任务结果数据
Err error // 异常信息, err == nil , 代表执行成功
}

77
task.go Normal file
View File

@ -0,0 +1,77 @@
// Package task ...
//
// Description : task ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022-06-23 15:13
package task
import (
"context"
"sync"
)
var (
// Dispatch 调度实例
Dispatch *dispatch
)
func init() {
Dispatch = &dispatch{
lock: &sync.RWMutex{},
taskTable: make(map[string]ITask),
}
}
// dispatch 任务调度
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:14 2022/6/23
type dispatch struct {
// 锁
lock *sync.RWMutex
// 任务表
taskTable map[string]ITask
}
// Register 注册任务
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:16 2022/6/23
func (d *dispatch) Register(taskInstanceList ...ITask) error {
d.lock.Lock()
defer d.lock.Unlock()
for _, taskInstance := range taskInstanceList {
if nil == taskInstance {
continue
}
d.taskTable[taskInstance.Name()] = taskInstance
}
return nil
}
// Remove 移除任务
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:16 2022/6/23
func (d *dispatch) Remove(taskNameList ...string) error {
d.lock.Lock()
defer d.lock.Unlock()
for _, taskName := range taskNameList {
delete(d.taskTable, taskName)
}
return nil
}
// Run 执行任务
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 15:18 2022/6/23
func (d *dispatch) Run(ctx context.Context, cfg *Config, taskParam map[string]interface{}) (map[string]interface{}, error) {
return nil, nil
}