2012-04-28 18 views
10

अभिनेता को विफलता पर फिर से प्रयास करने का एक अच्छा तरीका क्या है, लेकिन रीट्रीज़ के बीच बढ़ते समय अंतराल के साथ? मान लें कि मैं चाहता हूं कि अभिनेता 15 सेकंड के बाद फिर से कोशिश करें, फिर 30 सेकंड, फिर सीमित मिनट के लिए हर मिनट।अक्का: बढ़ती देरी अंतराल के साथ विफलता पर रीट्रीज़ कैसे निर्धारित करें?

यहाँ मैं क्या लेकर आए हैं:

  • अभिनेता की विधि करता है कि वास्तविक काम एक वैकल्पिक RetryInfo पैरामीटर है कि, वर्तमान है, पुन: प्रयास करें हम वर्तमान में कर रहे हैं की संख्या में शामिल है
  • विफलता पर में, अभिनेता ही retryCount + 1 के साथ एक नया ScheduleRetryMessage भेज देंगे, तो एक RuntimeException फेंक
  • एक और अभिनेता कार्यकर्ता अभिनेता का पर्यवेक्षण, Resume लौटने new OneForOneStrategy(-1, Duration.Inf() का उपयोग कर इसके निर्देश के रूप में। अभिनेता कोई राज्य नहीं है, इसलिए Resume, अभिनेता जाएगा
    • अगर retryCount < MAX_RETRIESScheduleRetryMessage प्राप्त करने पर ठीक
    • होना चाहिए: वांछित देरी
    • किसी और के बाद एक RetryMessage भेजने का समय निर्धारित करने अक्का की अनुसूचक का उपयोग करें: अंत में छोड़ देना, रिपोर्टिंग

त्रुटि के लिए एक और अभिनेता को कोई संदेश भेजने यह एक अच्छा समाधान है या एक बेहतर तरीका है?

उत्तर

8

आपके पास पर्यवेक्षक हो सकता है जो कार्यकर्ता अभिनेता को शुरू करता है। दस्तावेज़ों की नोक कार्यकर्ता के लिए आकार एक राउटर घोषित करना है। पर्यवेक्षक पुन: प्रयासों की संख्या का ट्रैक रखेगा, फिर कार्यकर्ता को उचित रूप से कार्यकर्ता को भेज दें।

भले ही आप अभिनेताओं की एक और परत तैयार करेंगे, यह मेरे लिए क्लीनर लगता है क्योंकि आप पर्यवेक्षी कार्यक्षमता को कार्यकर्ता से बाहर रखेंगे। आदर्श रूप में आप इस 1 पर्यवेक्षक को एन श्रमिकों के लिए बना सकते हैं, लेकिन मुझे लगता है कि आपको एक बाल अभिनेता से विफलता प्राप्त करने के लिए लाइफसाइकिल मॉनीटरिंग का उपयोग करना होगा। उस स्थिति में, आप सभी पर्यवेक्षित श्रमिकों के लिए पुनः प्रयासों की संख्या का ट्रैक रखने के लिए [ActorRef, Int] का मानचित्र रख सकते हैं। पर्यवेक्षण नीति फिर से शुरू होगी, लेकिन यदि आप अपनी अधिकतम रीट्रीज़ पर पहुंच गए हैं, तो आप अपमानजनक अभिनेता को एक जहर पिल भेज सकते हैं।

+0

दिलचस्प विचार, मैं कोशिश करूँगा। धन्यवाद! –

7

ऐसे मामलों में मैं मानक पर्यवेक्षण का उपयोग करता हूं। एक अभिभावक/पर्यवेक्षण अभिनेता एक समय खिड़की के भीतर retries परिभाषित करता है। पुनः प्रयास करने वाला कार्यकर्ता बच्चा केवल उस संदेश को फिर से शेड्यूल करता है जिसने प्रीरस्टार्ट() में देरी के साथ विफलता का कारण बनता है।

यदि पुनः प्रयास करने वाला बच्चा अपेक्षाकृत जटिल है, तो आप एक मध्यवर्ती अभिनेता से जुड़ने पर विचार कर सकते हैं। वह अभिनेता बस पर्यवेक्षण को बढ़ाता है। प्रीरस्टार्ट पर इंटरमीडिएट अभिनेता एक (देरी) पुनरारंभ-संदेश शेड्यूल करता है। मध्यवर्ती अभिनेता ने अपनी स्थिति को संरक्षित किया है, यह केवल कार्यकर्ता अभिनेता (देरी के साथ) को पुनरारंभ कर सकता है।

जैसा कि आप देख सकते हैं कि देरी हिस्सा प्रीरस्टार्ट या कार्यकर्ता की शुरुआत में हो सकता है।