หน้านี้จะอธิบายวิธีการกำหนดความสำคัญในการประมวลผลพื้นหลังด้วย asynq เพื่อตอบสนองความต้องการของคุณ

ความสำคัญที่มีน้ำหนัก

โดยค่าเริ่มต้น Server จะสร้างคิวที่ชื่อ "default" เพื่อประมวลผลงานทั้งหมด

หากคุณต้องการกำหนดความสำคัญให้กับแต่ละงาน คุณสามารถสร้างคิวหลายรายการที่มีระดับความสำคัญต่างกัน

ตัวอย่าง:

srv := asynq.NewServer(redis, asynq.Config{
    Concurrency: 10,
    Queues: map[string]int{
        "critical": 6,
        "default":  3,
        "low":      1,
    },
})

นี้จะสร้างอินสแตนส์ของ Background ที่มีคิวสามรายการ คือ critical, default, และ low ตัวเลขที่เกี่ยวข้องกับชื่อคิวแทนระดับความสำคัญของคิว

บนพื้นฐานของการกำหนดค่าข้างต้น:

  • งานในคิว critical จะถูกประมวลผล 60% ของเวลา
  • งานในคิว default จะถูกประมวลผล 30% ของเวลา
  • งานในคิว low จะถูกประมวลผล 10% ของเวลา

ตอนนี้ที่เรามีหลายคิวที่มีระดับความสำคัญต่างกัน เราสามารถระบุว่าจะใช้คิวใดเมื่อต้องการตั้งตารางงาน

ตัวอย่าง:

client := asynq.NewClient(redis)
task := asynq.NewTask("send_notification", map[string]interface{}{"user_id": 42})

// ใช้ตัวเลือก `asynq.Queue` เพื่อระบุงานที่ใช้คิว "critical"
err := client.Enqueue(task, asynq.Queue("critical"))

// เริ่มต้นที่จะนำงานเข้าคิวที่มีชื่อ "default"
err = client.Enqueue(task)

ด้วยคำสั่ง asynq stats เราสามารถตรวจสอบคิวได้

คุณสามารถดูจำนวนงานในแต่ละคิวในส่วน "QUEUES" ของผลลัพธ์

ความสำคัญอย่างเข้มข้น

หากคุณต้องการสร้างคิวหลายรายการและต้องการให้งานทั้งหมดในคิวหนึ่งถูกประมวลผลด้วยความสำคัญที่สูงกว่า คุณสามารถใช้ตัวเลือก StrictPriority

ตัวอย่าง:

srv := asynq.NewServer(redis, asynq.Config{
    Concurrency: 10,
    Queues: map[string]int{
        "critical": 3,
        "default":  2,
        "low":      1,
    },
    StrictPriority: true, // โหมดเข้มข้น!
})

นี้จะสร้างอินสแตนส์ของ Background ที่มีคิวสามรายการและความสำคัญเข้มข้น: critical, default, และ low ในโหมดความสำคัญเข้มข้น คิวที่มีความสำคัญสูงจะถูกประมวลผลก่อนเสมอ และคิวความสำคัญต่ำจะถูกประมวลผลเมื่อคิวความสำคัญที่สูงกว่าเป็นว่าง

ดังนั้น ในตัวอย่างนี้ งานในคิว critical จะถูกประมวลผลก่อนเสมอ หากคิว critical ว่างเปล่า คิว default จะถูกประมวลผล หากทั้งคิว critical และ default ว่างเปล่า คิว low จะถูกประมวลผล