मेरी समझ के लिए, गियरमैन बहुत "यह मेरा व्यवसाय नहीं है" दृष्टिकोण का उपयोग करता है - उदाहरण के लिए, जब तक मजदूरों को दुर्घटनाग्रस्त नहीं किया जाता है, तब तक यह नौकरियों के साथ हस्तक्षेप नहीं करता है। किसी भी सफलता/विफलता संदेशों को क्लाइंट द्वारा संभाला जाना चाहिए, न कि गियरमैन सर्वर स्वयं।
अग्रभूमि नौकरियों में, यह मतलब है कि सभी sendFail()
/sendException()
और अन्य send*()
ग्राहक के लिए निर्देशित किया गया है और यह काम पुनः प्रयास करें या नहीं करने के लिए तय करने के लिए ग्राहक के लिए है। यह समझ में आता है क्योंकि कभी-कभी आपको पुनः प्रयास करने की आवश्यकता नहीं होती है।
पृष्ठभूमि नौकरियों में, सभी send*()
फ़ंक्शंस अपना अर्थ खो देते हैं, क्योंकि कोई क्लाइंट नहीं है जो कॉलबैक सुन रहा होगा। नतीजतन, भेजे गए संदेश सिर्फ गियरमैन द्वारा अनदेखा किए जाएंगे। एकमात्र शर्त जिस पर नौकरी की पुन: प्रयास की जाएगी, जब कर्मचारी क्रैश हो जाता है (जो exit(XX)
कमांड के साथ अनुकरण करके कर सकता है, जहां XX
एक गैर-शून्य मान है)। यह, ज़ाहिर है, ऐसा कुछ नहीं है जिसे आप करना चाहते हैं, क्योंकि श्रमिकों को आम तौर पर लंबी चल रही प्रक्रियाएं माना जाता है, न कि उन सभी को जो असफल नौकरी के बाद पुनरारंभ करना होता है।
व्यक्तिगत रूप से, मैंने डिफ़ॉल्ट गियरमैनजोब क्लास को विस्तारित करके इस समस्या को हल किया है, जहां मैं send*()
फ़ंक्शन पर कॉल को रोकता हूं और फिर पुनः प्रयास तंत्र को कार्यान्वित करता हूं। अनिवार्य रूप से, मैं एक वर्कलोड के साथ सभी पुनः प्रयास-संबंधित डेटा (रीट्रीज़ की अधिकतम संख्या, पहले से ही पुनः प्रयास किया गया) पास करता हूं और फिर सब कुछ संभालता हूं। यह थोड़ा बोझिल है, लेकिन मुझे समझ में आता है कि गियरमैन इस तरह क्यों काम करता है - यह आपको सभी एप्लिकेशन तर्कों को संभालने की अनुमति देता है।
अंत में, घातीय समय समाप्ति (या उस मामले के लिए किसी भी समय समाप्ति) के साथ नौकरियों को पुनः प्रयास करने की क्षमता के संबंध में। गियरमैन में देरी की नौकरियां जोड़ने की सुविधा है (protocol documentation में देखें), फिर भी मुझे इसकी स्थिति के बारे में निश्चित नहीं है - PHP एक्सटेंशन और, मुझे लगता है कि पाइथन मॉड्यूल इसका समर्थन नहीं करता है और दस्तावेज़ कहते हैं कि इसे हटाया जा सकता है भविष्य। लेकिन मुझे लगता है कि यह इस समय काम करता है - आपको इसे करने के लिए गियरमैन को कच्चे सॉकेट अनुरोध जमा करने की आवश्यकता है (और घातीय भाग भी आपकी तरफ लागू किया जाना चाहिए)।
हालांकि, this blog post का तर्क है कि SUBMIT_JOB_EPOCH कार्यान्वयन अच्छी तरह से स्केल नहीं करता है। वह काम करने के लिए node.js और setTimeout()
का उपयोग करता है, मैंने दूसरों को ऐसा करने के लिए यूनिक्स उपयोगिता at
का उपयोग किया है। किसी भी तरह से - गियरमैन यह आपके लिए नहीं करेगा। यह विश्वसनीयता पर ध्यान केंद्रित करेगा, लेकिन आपको सभी तर्कों पर ध्यान केंद्रित करने देगा।
sys.exit() गियरमैन के साथ एक बुरा विचार है - आम तौर पर यह हमेशा के लिए ऐसी कोई नौकरी फिर से प्रयास करेगा (जब तक कि आपके पास डेमन स्टार्टअप पर जॉब-रेट्री सेट न हो)। नौकरी से किसी भी स्थिति/परिणामों के साथ बस 'वापसी स्ट्रिंगवर' करें (उदाहरण के लिए वास्तविक जानकारी के साथ डीबी पंक्ति या कैश में कुंजी।) – RichVel