इस पृष्ठ पर बताया गया है कि आपकी आवश्यकताओं को पूरा करने के लिए 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` विकल्प का प्रयोग करें।
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 क्यू प्रोसेस किया जाएगा।