Halaman ini akan menjelaskan bagaimana mengkonfigurasi prioritas pemrosesan latar belakang dengan asynq sesuai dengan kebutuhan Anda.

Prioritas Berbobot

Secara default, Server akan membuat antrian bernama "default" untuk memproses semua tugas.

Jika Anda perlu menetapkan prioritas untuk setiap tugas, Anda dapat membuat beberapa antrian dengan tingkat prioritas yang berbeda.

Contoh:

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

Ini akan membuat sebuah instance dari Background dengan tiga antrian: critical, default, dan low. Angka yang terkait dengan nama antrian mewakili tingkat prioritas antrian.

Berdasarkan konfigurasi di atas:

  • Tugas di dalam antrian critical akan diproses 60% dari waktu
  • Tugas di dalam antrian default akan diproses 30% dari waktu
  • Tugas di dalam antrian low akan diproses 10% dari waktu

Sekarang setelah kita memiliki beberapa antrian dengan tingkat prioritas yang berbeda, kita dapat menentukan antrian mana yang akan digunakan saat penjadwalan tugas.

Contoh:

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

// Gunakan opsi `asynq.Queue` untuk menentukan tugas menggunakan antrian "critical".
err := client.Enqueue(task, asynq.Queue("critical"))

// Secara default, tugas akan dimasukkan ke antrian "default".
err = client.Enqueue(task)

Dengan perintah asynq stats, kita dapat memeriksa antrian.

Anda dapat melihat jumlah tugas di setiap antrian di bagian "QUEUES" output.

Prioritas Ketat

Jika Anda perlu membuat beberapa antrian dan ingin semua tugas di satu antrian diproses dengan prioritas yang lebih tinggi, Anda dapat menggunakan opsi StrictPriority.

Contoh:

srv := asynq.NewServer(redis, asynq.Config{
    Concurrency: 10,
    Queues: map[string]int{
        "critical": 3,
        "default":  2,
        "low":      1,
    },
    StrictPriority: true, // Mode ketat!
})

Ini akan membuat sebuah instance dari Background dengan tiga antrian dan prioritas ketat: critical, default, dan low. Dalam mode prioritas ketat, antrian dengan prioritas lebih tinggi akan selalu diproses terlebih dahulu, dan antrian prioritas lebih rendah akan diproses hanya jika semua antrian prioritas lebih tinggi kosong.

Oleh karena itu, dalam contoh ini, tugas di dalam antrian critical akan selalu diproses terlebih dahulu. Jika antrian critical kosong, antrian default akan diproses. Jika kedua antrian critical dan default kosong, antrian low akan diproses.