2015-06-30 8 views
9

की असीमित प्रारंभिकरण मैं एक अभिनेता को अतुल्यकालिक रूप से प्रारंभ करने के लिए उचित पैटर्न खोजने की कोशिश कर रहा हूं, ताकि मैं निर्भर ActorRef की आवश्यकता हो। मैं ActorSelection का उपयोग कर से बचना चाहते हैं, क्योंकि यह अभिनेताओं इसे करने के लिए अंकों की संख्या के रूप मेंअक्का अभिनेताओं

  • अस्पष्ट है, और
  • कुछ भूमि के ऊपर है कि के लिए कई tell रों

अवांछनीय है Actor LifeCycle को देखते हुए किया गया है यह preStart इत्यादि सहित संदेश लूप शुरू होने तक सभी बहुत सिंक्रोनस प्रतीत होता है, जो मुझे लगता है कि मेरे पास केवल दो विकल्पों में से एक है:

अभिनेता निर्माण एसिंक्रोनस रूप से हल हो गई और Props के माध्यम से में पारित कर रहे हैं के लिए Future[ActorRef]

सभी निर्भरता का एक हस्ताक्षर के साथ एक कारखाने विधि का उपयोग करें।

इस दृष्टिकोण के साथ मुख्य समस्या यह है कि आप इस कारखाने का उपयोग किसी अन्य अभिनेता के अंदर एक अभिनेता बनाने के लिए नहीं कर सकते हैं, क्योंकि उसके बाद एक ही समस्या है, यानी यह सभी कलाकारों के पदानुक्रम को तारों से नीचे कर रहा है, उनकी निर्भरता असीमित रूप से।

उपयोग become और stash अभिनेता संक्रमण के लिए

अभिनेता, actorOf साथ बनाई गई है तुरंत एक ActorRef में जिसके परिणामस्वरूप लेकिन यह एक प्रारंभ राज्य में शुरू होता है, यह निर्भरता संकल्प, stash में भेजे गए संदेशों ing है करता है इस बीच, और अंत में become राज्य और unstashAll आईएनजी चला रहा है।

यह अभिनेताओं के लिए बहुत अधिक मूर्खतापूर्ण लगता है, भले ही मेरी निर्भरता के बजाय var हो।

दोनों बहुत अधिक ओवरहेड की तरह लगते हैं, जिससे मुझे आश्चर्य होता है कि क्या मैं सबसे अच्छे विकल्प हैं या यदि मुझे दस्तावेज़ों में उचित पैटर्न नहीं मिला है।

उत्तर

7

कोई कारण अपनी निर्भरता जब बन का उपयोग कर vars होना जरूरी नहीं है:

val initializing: Actor.Receive = { 
    case Dependencies(d1, d2) => context.become(working(d1, d2)) 
} 

def working(d1: Dependency, d2: Dependency): Actor.Receive = { 
    case msg => d1.fetch(...) // whatever 
} 

def receive = initializing 

इसके अलावा, actorFor एक है) पदावनत और ख) एक अभिनेता नहीं बनाता है।

+0

'अभिनेताफोर' के मेरे उपयोग को संपादित किया, यह एक टाइपो था। 'बन' निश्चित रूप से सर्वोत्तम दृष्टिकोण की तरह दिख रहा है। अभी भी विश्वास नहीं कर सकता कि 'प्रॉप्स' व्यंजनों का कोई एसिंक संस्करण नहीं है –

+0

मैंने अपरिवर्तनीय चलने वाले राज्य के लिए आपके सुझाव के साथ 'बनने'/'स्टैश' आधारित प्रारंभिक चरण के लिए एक विशेषता बनाई है: https: //gist.github। com/sdether/15bc96e27ed965bd89c3 –

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