এই পেজটি আপনার প্রয়োজনীয়তা মেটানুন করার জন্য 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})

// "critical" কিউ ব্যবহার করতে টাস্কটি অনুসূচীত করতে `asynq.Queue``-option ব্যবহার করুন।
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 কিউটি প্রসেস হবে।