कार्य धारणा

डिफ़ॉल्ट रूप से, एक कार्य को सफलतापूर्वक हैंडलर (यानी, Handler.ProcessTask में nil लौटाता है) द्वारा प्रसंस्कृत करने के बाद, कार्य को कतार से हटा दिया जाएगा। हालांकि, यदि आप चाहते हैं कि कार्य पूरा होने के बाद कतार में धारित रहे (उदाहरण के लिए, निरीक्षण के उद्देश्यों के लिए), तो आप कार्य के लिए धारणा अवधि निर्दिष्ट कर सकते हैं।

नीचे एक उदाहरण है जिसमें Retention विकल्प का उपयोग करके निर्दिष्ट किया गया है कि कार्य को पूरा होने के बाद कतार में 24 घंटे तक धारित रखा जाना चाहिए।

// कार्य को आरंभ करते समय विकल्प सेट करें।
task := asynq.NewTask("my_task", payload, asynq.Retention(24 * time.Hour))

// विकल्प सेट करने के बजाय, कार्य को कतार में डालते समय विकल्प सेट करें।
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))

इस विकल्प को सेट करने के बाद, आपको CLI या वेब UI का उपयोग करके पूरे हुए कार्य देखने में सक्षम होना चाहिए।

कार्य परिणाम

यदि कार्य प्रसंस्करण के दौरान कार्य से संबंधित कुछ डेटा स्टोर करना आवश्यक होता है, और यदि यह डेटा केवल कार्य के जीवनकाल के दौरान आवश्यक होता है (अर्थात, कार्य को कतार से हटाया जाता है तक), तो आप डेटा को कार्य के साथ संग्रहीत कर सकते हैं।

ResultWriter का उपयोग करके रेडिस में डेटा लिखें और लिखे गए डेटा को कार्य के साथ जोड़ें।

नोट: कृपया ध्यानपूर्वक विचार करें कि रेडिस में लिखे गए डेटा की मात्रा को। यदि बड़ी मात्रा में डेटा स्टोर करने की आवश्यकता होती है, तो बेहतर है कि एक SQL डेटाबेस जैसे डिस्क-आधारित स्टोरेज सिस्टम का उपयोग किया जाए।

// हैंडलर कोड में।
func MyHandler(ctx context.Context, task *asynq.Task) error {
    res, err := DoStuff(ctx, task)
    if err != nil {
        return fmt.Errorf("कार्य प्रसंस्करण करने में विफल: %v", err)
    }
    if _, err := task.ResultWriter().Write(res); err != nil {
        return fmt.Errorf("कार्य परिणाम लिखने में विफल: %v", err)
    }
    return nil
}

यदि आप उपर्युक्त रूप से Retention विकल्प का उपयोग करते हैं, तो आपको CLI और वेब UI का उपयोग करके परिणाम डेटा देखने में सक्षम होंगे। इसके अतिरिक्त, आप Inspector.GetTaskInfo और Inspector.ListCompletedTasks का उपयोग करके प्रोग्रामेटिक रूप से परिणाम डेटा तक पहुंच सकते हैं।