Go (Golang) में कार्य शेड्यूलर: सरल टिकर से लेकर औद्योगिक क्रोन तक
\n\nकार्य शेड्यूलर (task scheduler) एक घटक है जो निर्धारित समय पर या निश्चित अंतराल पर विशिष्ट कार्यों को निष्पादित करने की अनुमति देता है। Go (Golang) इकोसिस्टम में शेड्यूलर को लागू करने के कई तरीके हैं: भाषा के अंतर्निहित प्रिमिटिव से लेकर शक्तिशाली तृतीय-पक्ष लाइब्रेरी तक। इस लेख में, हम सीखेंगे कि Go में कार्य शेड्यूलर कैसे बनाया जाए, सरल उदाहरणों से शुरू करके लोकप्रिय robfig/cron लाइब्रेरी के उपयोग तक।
Go में कार्य शेड्यूलर की आवश्यकता क्यों है?
\nGo उच्च-प्रदर्शन वाले सर्वर एप्लिकेशन, माइक्रोसर्विसेज और कमांड-लाइन उपयोगिताओं को बनाने के लिए आदर्श है। कार्य शेड्यूलर नियमित कार्यों को स्वचालित करने में मदद करता है:
\n- \n
- कैश या अस्थायी फ़ाइलों की सफाई \n
- आवधिक सूचनाएं भेजना (ईमेल, SMS) \n
- मेट्रिक्स और मॉनिटरिंग एकत्र करना \n
- बाहरी API के साथ डेटा सिंक्रोनाइज़ेशन \n
- शेड्यूल के अनुसार रिपोर्ट जनरेट करना \n
time.Ticker का उपयोग करके बेसिक शेड्यूलर
\nहर N सेकंड में कार्य निष्पादित करने का सबसे सरल तरीका time.Ticker का उपयोग करना है। यह अंतर्निहित Go टूल निर्धारित अंतराल पर चैनल में मान भेजता है।
package main\n\nimport (\n "fmt"\n "time"\n)\n\nfunc main() {\n ticker := time.NewTicker(2 * time.Second)\n done := make(chan bool)\n\n go func() {\n for {\n select {\n case <-ticker.C:\n fmt.Println("कार्य निष्पादित:", time.Now().Format(time.RFC3339))\n case <-done:\n ticker.Stop()\n return\n }\n }\n }()\n\n // 10 सेकंड के बाद शेड्यूलर रोकें\n time.Sleep(10 * time.Second)\n done <- true\n fmt.Println("शेड्यूलर रोक दिया गया")\n}\n\nयह कोड एक goroutine बनाता है जो हर 2 सेकंड में वर्तमान समय प्रिंट करता है। select के उपयोग पर ध्यान दें - यह कई चैनलों के नॉन-ब्लॉकिंग प्रोसेसिंग के लिए Go का मुख्य पैटर्न है।
लचीले शेड्यूल के साथ शेड्यूलर: robfig/cron लाइब्रेरी
\nवास्तविक प्रोजेक्ट्स के लिए, जहां क्रोन-जैसे शेड्यूल की आवश्यकता होती है (जैसे, "हर सोमवार सुबह 9:00 बजे" या "सुबह 9 से शाम 6 बजे तक हर 5 मिनट"), github.com/robfig/cron/v3 लाइब्रेरी सबसे उपयुक्त है। यह मानक क्रोन सिंटैक्स को पूरी तरह से सपोर्ट करती है और टाइमज़ोन हैंडलिंग और पैनिक हैंडलिंग जैसी सुविधाजनक सुविधाएं जोड़ती है।
इंस्टॉलेशन
\ngo get github.com/robfig/cron/v3\n\nउपयोग का उदाहरण
\npackage main\n\nimport (\n "fmt"\n "log"\n "time"\n\n "github.com/robfig/cron/v3"\n)\n\nfunc main() {\n c := cron.New(cron.WithSeconds()) // सेकंड का समर्थन सक्षम करें\n\n // कार्य जोड़ें: हर 10 सेकंड\n _, err := c.AddFunc("*/10 * * * * *", func() {\n fmt.Println("कार्य 1: हर 10 सेकंड", time.Now().Format(time.RFC3339))\n })\n if err != nil {\n log.Fatal(err)\n }\n\n // कार्य: UTC के अनुसार प्रतिदिन 14:30 बजे\n _, err = c.AddFunc("0 30 14 * * *", func() {\n fmt.Println("कार्य 2: प्रतिदिन 14:30 UTC पर")\n })\n if err != nil {\n log.Fatal(err)\n }\n\n // बाद में प्रबंधन के लिए नाम वाला कार्य\n entryID, _ := c.AddFunc("@every 1m", func() {\n fmt.Println("कार्य 3: हर मिनट")\n })\n\n c.Start()\n\n // 5 मिनट बाद कार्य हटाएं\n time.Sleep(5 * time.Minute)\n c.Remove(entryID)\n fmt.Println("कार्य 3 हटा दिया गया")\n\n // main को ब्लॉक करें\n select {}\n}\n\nलाइब्रेरी शेड्यूल के कई फॉर्मेट सपोर्ट करती है:
\n- \n
- मानक क्रोन:
"30 * * * *"— हर 30 मिनट \n - सेकंड के साथ:
"0 30 * * * *"— हर मिनट के 30वें सेकंड पर \n - @every:
"@every 5m"— हर 5 मिनट \n पुस्तकालय में भी
अनुशंसाएँ