ไลฟ์ไซเคิลของงาน
งานแบบอะสินโครนัสผ่านหลายสถานะขณะวัฏจักรของมัน หน้านี้บันทึกว่าไฮไลฟ์ไซเคิลของงานตั้งแต่การสร้างจนถึงการลบ
เมื่อคิวงาน อาซินกิ้ manages งานภายในเพื่อให้แน่ใจว่าแฮนด์เลอร์จะถูกเรียกใช้ตามเวลาที่ระบุ ระหว่างขั้นตอนนี้ งานอาจผ่านสถานะไลฟ์ไซเคิลที่แตกต่างกัน
นี่คือรายการของสถานะไลฟ์ไซเคิลที่แตกต่างกัน:
-
Scheduled: งานกำลังรอการประมวลผลในอนาคต (สามารถใช้สำหรับงานที่มีอ็อปชัน
ProcessAt
หรือProcessIn
) - Pending: งานพร้อมสำหรับการประมวลผลและจะถูกเรียกใช้โดยเเวร์เกอร์ที่ว่าง
- Active: งานกำลังถูกประมวลผลโดยเเวร์เกอร์ (กล่าวคือ, แฮนเเลอร์กำลังประมวลผลงาน)
- Retry: เเวร์เกอร์ไม่สามารถประมวลผลงานได้ และงานกำลังรอการลองใหม่ในอนาคต
- Archived: งานได้ถึงจำนวนครั้งที่ลองใหม่สูงสุดและถูกเก็บไว้ในอาร์คีฟเพื่อการตรวจสอบด้วยมือ
-
Completed: งานได้ถูกประมวลผลเรียบร้อยและจะถูกเก็บไว้จนกว่าเวลาการถือครองสิ้นสุด (สามารถใช้สำหรับงานที่มีอ็อปชัน
Retention
)
ให้เรามองไลฟ์ไซเคิลของงานในสถานะต่างๆด้วยตัวอย่าง
// งานที่ 1: กำลังรอการประมวลผลใน 24 ชั่วโมง
client.Enqueue(task1, asynq.ProcessIn(24*time.Hour))
// งานที่ 2: ใส่คิวเพื่อทำการประมวลผลทันที
client.Enqueue(task2)
// งานที่ 3: ใส่คิวพร้อมอ็อปชันการถือครอง
client.Enqueue(task3, asynq.Retention(2*time.Hour))
ในตัวอย่างนี้, งานที่ 1
จะอยู่ในสถานะ Scheduled ต่อไปไปยัง 24 ชั่วโมงถัดไป หลังจากนั้น มันจะเปลี่ยนสถานะไปยัง Pending และจากนั้นไปยัง Active เเล้วถ้างานถูกประมวลผลเรียบร้อย, ข้อมูลของงานจะถูกลบออกจาก Redis ถ้างานไม่ถูกประมวลผลเรียบร้อย (กล่าวคือ, แฮนเเลอร์คืนค่าerror หรือ panic), งานจะเปลี่ยนสถานะไปยัง Retry เพื่อลองใหม่ในภายหลัง หลังจาก ช่วงเวลา, งานจะกลับสู่ Pending และจากนั้นไปยัง Active ขั่นนี้จะเรียกใช้ไปเรื่อยไปจนกว่างานจะถูกประมวลผลเรียบร้อยหรือใช้จนครบจำนวนครั้งที่ลองใหม่ ในกรณีหลัง, งานจะเปลี่ยนสถานะไปยัง Archived
ในตัวอย่างนี้, ความแตกต่างเดียวกันระหว่าง งานที่ 2
และ งานที่ 1
คือ งานที่ 2
ข้ามไปยังสถานะ Scheduled และกลับเข้าสู่ Pending โดยตรง
งานที่ 3
ถูกใส่คิวพร้อมอ็อปชันการถือครองเป็น 2 ชั่วโมง ซึ่งหมายความว่าหลังจากเเวร์คเกอร์ประมวลผล งานที่ 3
เรียบร้อย, งานจะยังเข้าสู่สถานะ Completed เป็นเวลา 2 ชั่วโมงก่อนจะถูกนำออกจากคิว โดยค่าเริ่มต้น, ถ้างานไม่มีอ็อปชันการถือครองที่ตั้งไว้, มันจะถูกนำออกจากคิวเเละทันทีหลังจบ
แผนภาพด้านล่างอธิบายการเปลี่ยนสถานะไลฟ์
+-------------+ +--------------+ +--------------+ +-------------+
| | | | | | สำเร็จ | |
| Scheduled |----------->| Pending |--------->| Active |---------> | Completed |
| (อ็อปชัน) | | | | | | (อ็อปชัน) |
+-------------+ +--------------+ +--------------+ +-------------+
^ | |
| | | การลบ
| | ล้มเหลว |
| | V
| |
| |
+------+-------+ | +--------------+
| | | | |
| Retry |<--------------+------->| Archived |
| | | |
+--------------+ +--------------+