หน้านี้จะอธิบายวิธีการกำหนดความสำคัญในการประมวลผลพื้นหลังด้วย 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 จะถูกประมวลผล