From eb9cb4b6e2d6ef5e0a118646564deb29aea325cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E8=8C=B6=E6=B8=85=E6=AC=A2?= Date: Thu, 23 Jun 2022 15:33:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=BB=E5=8A=A1=E8=B0=83?= =?UTF-8?q?=E5=BA=A6,=20=E4=BB=BB=E5=8A=A1=E6=89=A7=E8=A1=8C=E5=BE=85?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- abstract.go | 2 +- define.go | 20 +++++++++----- task.go | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+), 7 deletions(-) create mode 100644 task.go diff --git a/abstract.go b/abstract.go index 95aae7b..2b7b5b0 100644 --- a/abstract.go +++ b/abstract.go @@ -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) } diff --git a/define.go b/define.go index 10c9a78..72e7089 100644 --- a/define.go +++ b/define.go @@ -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 , 代表执行成功 } diff --git a/task.go b/task.go new file mode 100644 index 0000000..1bca670 --- /dev/null +++ b/task.go @@ -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 +}