2016-08-14 10 views
7

की विधि प्राप्त करने के लिए एसिंक्रोनस कॉल को संभालने का सबसे अच्छा तरीका मैं डेटाबेस में डेटा को जारी रखने की कोशिश कर रहा हूं। मेरी दृढ़ विधि असीमित है।अकिंक अभिनेता

class MyActor(persistenceFactory:PersistenceFactory) extends Actor { 
    def receive: Receive = { 
    case record: Record => 
     // this method is asynchronous, immediate return Future[Int] 
     persistenceFactory.persist(record) 
    } 
} 

बाधा यहां या तो हम मेमोरी से बाहर हो जाते हैं या कोई लोड उपलब्ध नहीं होने पर कोई थ्रेड उपलब्ध नहीं होता है।

तो अक्का अभिनेता की विधि प्राप्त करने के अंदर एसिंक्रोनस कॉल को संभालने का सबसे अच्छा तरीका क्या है?

+0

क्या चल रहा है? क्या यह एक अंतर्निहित 'निष्पादन कॉन्टेक्स्ट' स्वीकार करता है? –

+0

नहीं, इसका अपना निष्पादन कॉन्टेक्स्ट है। – Sky

+0

यह 'निष्पादन कॉन्टेक्स्ट' कैसे बनाता है? क्या आप कोड दिखा सकते हैं? –

उत्तर

1

यह एक महान उदाहरण है जब आपको एक अभिनेता को बातचीत करने के लिए एक और अभिनेता बनाना चाहिए। असल में प्रवाह इस तरह है और आप एफएसएम (परिमित राज्य मशीन) का भी उपयोग कर सकते हैं यदि यह आपके लिए आसान बनाता है।

  1. जनक अभिनेता को मिलने वाले संदेश
  2. जनक अभिनेता बनाता है बच्चे को लेन-देन अभिनेता
  3. जनक बच्चे मूल संदेश
  4. बाल async प्रणाली को बुलाती है और संग्रहीत करता है भविष्य
  5. बाल बन का उपयोग करता है भेजता है() को बदलने के लिए भविष्य के पूरा होने की प्रतीक्षा करने के लिए इसका व्यवहार। एफएसएम सहित ऐसा करने के कई तरीके हैं।
  6. बाल schedules periodic messages to itself भविष्य की जाँच करने के
  7. बच्चे की नए व्यवहार भविष्य की जाँच करता है यह पूरा हो गया है, तो प्रत्येक प्राप्त पर
  8. जब भविष्य पूरा हो गया है, बच्चे माता-पिता के लिए या मूल प्रेषक को परिणाम के साथ उत्तर दे सकते हैं (अगर माता-पिता ने मूल प्रेषक के साथ संदेश फहराया)।
+0

शायद हम भविष्य में 'ऑन कॉम्प्लेटी' कॉलबैक पंजीकृत कर सकते हैं जो परिणाम बच्चे के अभिनेता को भेजता है। –

+0

निश्चित रूप से, मैं जावा को स्केल भविष्य या जावा 8 पूर्ण भविष्य के बारे में सोच रहा था। यद्यपि कॉलबैक के लिए नीचे की तरफ है। भविष्य में निष्पादक के साथ कुछ होने पर भी आप बच्चे को टाइमआउट संदेश भेजना चाहते हैं। – dres

संबंधित मुद्दे