कार्य समय सीमा
इस पृष्ठ में, मैं आपको टास्क के लिए समय सीमा या डेडलाइन सेट करने और रद्दीकरण कार्यों को कैसे हैंडल करें इसके बारे में बताऊंगा।
Client
का उपयोग करके टास्क को कतार में डालते समय, आप Timeout
या Deadline
को विकल्प के रूप में निर्दिष्ट कर सकते हैं। यह सर्वर को टास्क को छोड़ देने और अन्य टास्कों के लिए संसाधनों को पुनः प्राप्त करने की अनुमति देता है अगर टास्क समय सीमा या डेडलाइन से पहले प्रसंस्कृत नहीं होता है।
ये विकल्प context.Context
की समय सीमा या डेडलाइन को सेट करेंगे और इसे आपके हैंड्लर के पहले पैरामीटर के रूप में भेजेंगे।
*ध्यान दें: समय सीमा हैंडलर को कार्य की प्रसंस्करण शुरू होने के बाद से संबंधित है।
उदाहरण के लिए, अगर आपके पास एक टास्क है जिसे 30 सेकंड के भीतर पूरा करना है, तो आप समय सीमा को 30*time.Second
पर सेट कर सकते हैं।
c := asynq.NewClient(asynq.RedisClientOpt{Addr: ":6379"})
err := c.Enqueue(task, asynq.Timeout(30 * time.Second))
अगर आपके पास ऐसा कोई कार्य है जिसे निश्चित समय के पहले पूरा करना है, तो आप टास्क के लिए डेडलाइन सेट कर सकते हैं।
उदाहरण के लिए, अगर आपके पास एक ऐसा कार्य है जिसे 2020-12-25
से पहले पूरा करना है, तो आप इसे Deadline
विकल्प के रूप में पारित कर सकते हैं।
xmas := time.Date(2020, time.December, 25, 0, 0, 0, 0, time.UTC)
err := c.Enqueue(task, asynq.Deadline(xmas))
हैंडलर में कार्य संदर्भ
अब जब हमने Timeout
और Deadline
विकल्पों का उपयोग करके टास्क बनाया है, हमें इस मूल्य का सम्मान करना चाहिए जो कि सीमा की चैनल को पढ़ करके होता है।
Handler
को पास किया गया पहला पैरामीटर context.Context
है। आपको अपने हैंडलर को इस तरीके से लिखना चाहिए जो कि संदर्भ से रद्दीकरण सिग्नल प्राप्त होने पर कार्य छोड़ देता है।
func myHandler(ctx context.Context, task *asynq.Task) error {
c := make(chan error, 1)
go func() {
c <- doWork(task)
}()
select {
case <-ctx.Done():
// रद्दीकरण सिग्नल प्राप्त हुआ, इस कार्य को छोड़ दें।
return ctx.Err()
case res := <-c:
return res
}
}
क्लाइ से टास्कों का रद्दीकरण
asynq
CLI के पास cancel
कमांड है जो किसी सक्रिय कार्य के आईडी को रद्द कर सकता है।
आप वर्तमान में सक्रिय कार्यों को जांचने और रद्द करने के लिए workers
कमांड का उपयोग कर सकते हैं और रद्द करने के लिए कार्य की आईडी प्राप्त कर सकते हैं।
asynq task ls --queue=myqueue --state=active
asynq task cancel [task_id]