سيقوم هذا الصفحة بشرح كيفية تكوين أولوية معالجة الخلفية باستخدام 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.