# hash_queue **Repository Path**: hashnetwork/hash_queue ## Basic Information - **Project Name**: hash_queue - **Description**: 持久化队列,支持定时任务和即时任务 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-06-12 - **Last Updated**: 2023-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 持久化任务队列 支持定时任务和即时任务 1、定义任务处理函数 ```任务处理对象 // TestTask 测试任务 // 这种方式已经不再支持,请使用全新的方法 func TestTask(task HashTask) error { //处理任务 //task.Type = "test" fmt.Printf("执行任务:task.id=%s,type=%s,param=%v\n", task.Id, task.Type, task.Params) time.Sleep(5 * time.Second) return nil } type DownloadTask struct{} // 这是 Go 语言中的一个常见技巧,用于在编译时检查 *DownloadTask 是否实现了 ITask 接口 var _ ITask = (*DownloadTask)(nil) func (t *DownloadTask) Task(param *HashTask) (result any, e error) { // todo 任务执行代码写在这里 return nil, nil } func (t *DownloadTask) OnFail(d any, param *HashTask) { //todo 任务失败代码写在这里 } ``` 2、 注册任务 ```注册 RegisterTask("test", &DownloadTask{}) ``` 3、启动执行 ```启动 defaultQueue := DefaultQueue() defaultQueue.ClearTaskList() go defaultQueue.StartQueue() defer defaultQueue.CloseQueue() t1 := HashTask{ Id: "111", Type: "test", Params: "任务1111111111", } defaultQueue.PushTask(t1) //defaultQueue.ShowTaskList() t2 := HashTask{ Id: "222", Type: "test", Params: "任务222222222", StartAt: time.Now().Unix() + 10, } defaultQueue.PushTask(t2) ```