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.