Bu sayfa, asynq
ile arka planda işleme önceliğini yapılandırmanın gereksinimlerinize uygun hale getirilmesini açıklayacaktır.
Ağırlıklı Öncelik
Varsayılan olarak, Server
, tüm görevleri işlemek için "varsayılan" adında bir kuyruk oluşturacaktır.
Her göreve öncelik atamanız gerekiyorsa, farklı öncelik seviyelerine sahip çoklu kuyruklar oluşturabilirsiniz.
Örnek:
srv := asynq.NewServer(redis, asynq.Config{
Concurrency: 10,
Queues: map[string]int{
"critical": 6,
"default": 3,
"low": 1,
},
})
Bu, üç kuyruğa sahip bir Background
örneği oluşturacaktır: critical, default, ve low. Kuyruk adlarıyla ilişkilendirilen sayılar, kuyrukların öncelik seviyesini temsil etmektedir.
Yukarıdaki yapılandırmaya dayanarak:
- critical kuyruğundaki görevlerin %60'ı işlenecektir
- default kuyruğundaki görevlerin %30'u işlenecektir
- low kuyruğundaki görevlerin %10'u işlenecektir
Şimdi farklı öncelik seviyelerine sahip birden çok kuyruğumuz olduğuna göre, görevleri planlarken hangi kuyruğun kullanılacağını belirtebiliriz.
Örnek:
client := asynq.NewClient(redis)
task := asynq.NewTask("send_notification", map[string]interface{}{"user_id": 42})
// "critical" kuyruğunu kullanmak için `asynq.Queue` seçeneğini kullanın.
err := client.Enqueue(task, asynq.Queue("critical"))
// Varsayılan olarak, görevler "default" kuyruğuna eklenir.
err = client.Enqueue(task)
asynq stats
komutu ile kuyrukları kontrol edebiliriz.
Çıktının "QUEUES" bölümünde her kuyruktaki görev sayısını görebilirsiniz.
Katı Öncelik
Birden çok kuyruk oluşturmanız ve bir kuyruktaki tüm görevlerin daha yüksek öncelikle işlenmesini istiyorsanız, StrictPriority
seçeneğini kullanabilirsiniz.
Örnek:
srv := asynq.NewServer(redis, asynq.Config{
Concurrency: 10,
Queues: map[string]int{
"critical": 3,
"default": 2,
"low": 1,
},
StrictPriority: true, // Katı mod!
})
Bu, üç kuyruğa ve katı önceliğe sahip bir Background
örneği oluşturacaktır: critical, default ve low. Katı öncelik modunda, daha yüksek önceliğe sahip kuyruklar her zaman öncelikle işlenir ve daha düşük önceliğe sahip kuyruklar, diğer yüksek öncelikli kuyruklar boş olduğunda yalnızca işlenir.
Bu örnekte, critical kuyruğundaki görevler her zaman öncelikle işlenir. Eğer critical kuyruğu boş ise default kuyruğu işlenir. Eğer critical ve default kuyrukları boş ise low kuyruğu işlenir.