ไลฟ์ไซเคิลของงาน

งานแบบอะสินโครนัสผ่านหลายสถานะขณะวัฏจักรของมัน หน้านี้บันทึกว่าไฮไลฟ์ไซเคิลของงานตั้งแต่การสร้างจนถึงการลบ

เมื่อคิวงาน อาซินกิ้ 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   |
                           |              |                        |              |
                           +--------------+                        +--------------+