การเก็บรักษางาน
โดยค่าเริ่มต้น เมื่องานถูกประมวลผลเรียบร้อยโดย 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
ด้วย