成功最有效的方法就是向有经验的人学习!

任务留存&任务结果

任务保留

默认情况下,一旦任务成功通过Handler处理(即Handler.ProcessTask返回nil),该任务将从队列中删除。然而,如果你希望在任务完成后将其保留在队列中(例如,用于检查目的),你可以为任务指定保留期。

下面是一个使用Retention选项指定任务在完成后保留在队列中24小时的示例。

// 在任务初始化时设置选项。
task := asynq.NewTask("my_task", payload, asynq.Retention(24 * time.Hour))

// 或者,在排队时设置选项。
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))

设置了此选项后,你应该能够使用CLI或Web UI看到已完成的任务。

任务结果

如果你想在任务处理时存储与任务相关的一些数据,并且如果这些数据只在任务的生命周期内需要(即直到任务从队列中删除),那么你可以将数据与任务一起存储。

使用ResultWriter将数据写入redis,从而将写入的数据与任务关联起来。

注意:请谨慎考虑写入redis的数据量,如果需要存储的数据很大,最好使用基于磁盘的存储系统,比如SQL数据库。

// 在处理程序代码中。
func MyHandler(ctx context.Context, task *asynq.Task) error {
    res, err := DoStuff(ctx, task)
    if err != nil {
        return fmt.Errorf("failed to process task: %v", err)
    }
    if _, err = task.ResultWriter().Write(res); err != nil {
        return fmt.Errorf("failed to write task result: %v", err)
    }
    return nil
}

如果你结合上面显示的Retention选项一起使用,你将能够通过CLI和Web UI查看结果数据。此外,可以通过使用Inspector.GetTaskInfoInspector.ListCompletedTasks以编程方式访问结果数据。

赞(0) 打赏
未经允许不得转载:竹影清风阁 » 任务留存&任务结果
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册