การเก็บรักษางาน

โดยค่าเริ่มต้น เมื่องานถูกประมวลผลเรียบร้อยโดย Handler (เช่น Handler.ProcessTask ส่งคืนค่า nil) งานจะถูกนำออกจากคิว แต่หากคุณต้องการให้งานถูกเก็บรักษาในคิวหลังจากเสร็จสิ้น (เช่น สำหรับการตรวจสอบ) คุณสามารถระบุระยะเวลาเก็บรักษาสำหรับงานได้

ด้านล่างนี้เป็นตัวอย่างการใช้ Retention option เพื่อระบุว่างานควรถูกเก็บรักษาในคิวเป็นเวลา 24 ชั่วโมงหลังจากเสร็จสิ้น

// ตั้งค่าเมื่อกำลังเริ่มต้นงาน
task := asynq.NewTask("my_task", payload, asynq.Retention(24 * time.Hour))

// อย่างอื่น ๆ สามารถตั้งค่าเมื่อเข้าคิวงาน
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))

หลังจากที่ตั้งค่า option นี้แล้ว คุณควรสามารถเห็นงานที่เสร็จสิ้นโดยใช้ CLI หรือ Web UI

ผลลัพธ์ของงาน

หากคุณต้องการเก็บข้อมูลที่เกี่ยวข้องกับงานขณะประมวลผลงาน และหากข้อมูลนี้เป็นเพียงที่จำเป็นชั่วคราว (เช่น จนกว่างานจะถูกนำออกจากคิว) คุณสามารถเก็บข้อมูลพร้อมกับงานได้

ใช้ ResultWriter เพื่อเขียนข้อมูลไปยัง redis และเชื่อมต่อข้อมูลที่เขียนแล้วกับงาน

หมายเหตุ: โปรดพิจารณาอย่างรอบคอบปริมาณข้อมูลที่เขียนลงใน redis หากต้องการจัดเก็บปริมาณข้อมูลมาก ควรใช้ระบบจัดเก็บข้อมูลบนดิสก์ เช่น ฐานข้อมูล SQL

// ในโค้ดของ Handler
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 option เช่นที่แสดงด้านบน คุณสามารถดูข้อมูลผลลัพธ์ผ่านทาง CLI และ Web UI ได้ นอกจากนี้ ยังสามารถเข้าถึงข้อมูลผลลัพธ์โดยโปรแกรมได้ผ่านทาง Inspector.GetTaskInfo และ Inspector.ListCompletedTasks ด้วย