2013-01-12 37 views
6

में मैन्युअल रूप से अभिनेता पदानुक्रम बनाने के लिए मेरे आवेदन को अभिनेताओं की वृक्ष संरचना बनाने में सक्षम होना चाहिए। ऐसा करने का मानक तरीका मुझे लगता है कि अभिनेताओं के अंदर तात्कालिकता कोड डालना होगा ताकि वे अपने बच्चों को तुरंत चालू कर सकें। दृष्टिकोण मैं एक दिए गए पथ पर एक अभिनेता को तुरंत चालू करने में सक्षम होना होगा। जैसे कि मेरे सिस्टम में अभिनेता ए बनाते हैं और फिर सीधे एक्क्का बनाने में सक्षम होते हैं: // mySystem/A/B और अन्य कलाकार। क्या ऐसी कार्यक्षमता मौजूद है? यह मेरे कोड को काफी सरल बना देगा।अक्का

संपादित करें: अब जब मैं अपने फोन पर नहीं हूं, तो मुझे विस्तृत करें।

कहते हैं कि मैं एक वर्ग

class myActor extends actor 

है और मैं इनमें से एक n रास्ता पेड़ बनाने की जरूरत है। इसके बजाय

case Create(n:Int) => {} 

की तरह कुछ के साथ प्राप्त समारोह में अपने बच्चों का दृष्टांत को मैं उस के किसी भी शामिल नहीं द्वारा myActor कोड सरल करने के लिए देख रहा हूँ के लिए आवश्यक कोड होने और इसके बजाय शुरू में मेरी पदानुक्रम बनाने के लिए सक्षम होने का मैन्युअल रूप से मेरे कोड का। तो आदर्श रूप कुछ इस तरह (यह मानते हुए काल्पनिक स्थिर समारोह "बनाने के"):

val sys = ActorSystem("mySystem") 
Akka.Actors.Create("akka://mySystem/a", new myActor()) 
Akka.Actors.Create("akka://mySystem/a/b", new myActor()) 
Akka.Actors.Create("akka://mySystem/a/c", new myActor()) 

जो अभिनेता पेड़ बन जाएगा:

a 
/\ 
b c 

अब, यह मौजूद है? क्या तत्काल कोड के साथ मेरे अभिनेता कोड को छेड़छाड़ किए बिना ऐसा करने का कोई बेहतर तरीका है?

संपादित करें, गोल 2:

ठीक है, इस कार्यक्षमता की तरह अस्तित्व में नहीं है लग रहा है। मैंने इसके बजाय अभिनेता का उप-गुण बनाया और वहां मेरे सभी तत्काल कोड को मजबूर कर दिया ताकि मेरा ठोस कार्यान्वयन वर्ग अभी भी साफ हो।

उत्तर

2

प्रत्येक अभिनेता के माता-पिता होते हैं। जो भी आप चाहते हैं उसे करने के लिए, आपको अन्य सभी कलाकारों (मूल अभिनेता के अलावा) के माता-पिता के रूप में सेवा करने के लिए Actor कक्षा की आवश्यकता होगी। चूंकि अभिभावक अभिनेता पर्यवेक्षण कलाकारों के समानार्थी हैं, इसलिए आप उन अभिभावकों के कलाकारों पर आवेदन करने के लिए पर्यवेक्षण रणनीति को निर्देशित करने के कुछ साधन चाहते हैं।

मैं तुम्हें अभिनेता पदानुक्रम के इंटीरियर स्थिति में जगह है और एक अभिनेता के पथ नाम विघटित और पदानुक्रम एक या उन रास्तों में से अधिक से निर्धारित बनाने के लिए एक विधि लिखने के लिए एक सामान्य माता पिता Actor निर्धारित कर सकते हैं लगता है। आप शायद पत्थर अभिनेता में स्थापित करने के लिए पर्यवेक्षण रणनीति निर्दिष्ट करने और कम से कम receive फ़ंक्शन निर्दिष्ट करने का तरीका चाहते हैं।

के बाद से केवल एक अभिनेता अपने बच्चों को बना सकते हैं, माता पिता अभिनेता अपनी बाल कलाकारों बनाने (या तो दूसरे माता पिता अभिनेता या पत्ती अभिनेताओं) किसी भी तरह जो Actor उपवर्ग के लिए दृष्टांत के लिए चयन करने के लिए एक तरह से साथ आ के लिए संदेशों का जवाब करने के लिए होगा पत्ती अभिनेता।

लेकिन आपके प्रश्न का उत्तर देने के लिए, ऐसा करने के लिए कुछ भी अंतर्निहित नहीं है। मुझे नहीं लगता कि इसमें अक्का खुद को जोड़ने का औचित्य साबित करने के लिए पर्याप्त सामान्य उपयोगिता है।

2

मूल अभिनेता के भीतर रूट अभिनेता बनाएं, अपने पेड़ को actorFor के साथ बनाएं। नामों के पदानुक्रम की स्थिर कॉन्फ़िगरेशन के लिए क्लासपाथ में application.conf का उपयोग करें, या पते की कुछ स्थिर संरचना बनाएं। दूसरा विकल्प पार्स पथ है और preStart ओवरराइड में बच्चों को बनाते हैं।बच्चों के जीवन चक्र की निगरानी के लिए अलग-अलग योजनाएं हैं, एक अभिनेता के माध्यम से संदेशों को पारदर्शी रूप से पुनरारंभ करें और रूट करें।

4

आपका प्रश्न समाधान के नियोजन के साथ शुरू होता है, और दुर्भाग्य से समस्या का वर्णन शामिल नहीं है।

अभिनेता के पेड़ को पर्यवेक्षण पदानुक्रम के रूप में समझा जाना सबसे महत्वपूर्ण है: माता-पिता अपने बच्चों की असफलताओं को नियंत्रित करते हैं और माता-पिता के जीवन चक्र अपने बच्चों के जीवन चक्र पर सीमाबद्ध होते हैं। इन प्रभावों पर विचार करके एक अभिनेता को किसी और जरूरत का बच्चा होना चाहिए या नहीं।

मैं कहता हूं कि आपके प्रश्न का तात्पर्य है कि आप कुछ अन्य मानदंडों के अनुसार पर्यवेक्षण वृक्ष का मॉडल कर रहे हैं, संभवतः इसे system.actorFor के साथ लुकअप तंत्र के रूप में रजिस्ट्री के रूप में दुरुपयोग करने के लिए संभवतः। दुर्लभ मामले हो सकते हैं जहां यह काम करता है, लेकिन एक प्राथमिकता मैं इसकी अनुशंसा नहीं करता; मैं एक प्रेषक अभिनेता के अंदर एक हैश-नक्शा रखना चाहता हूं और उसमें लुक-अप को संभालना है। यदि आप माप से निष्कर्ष निकालते हैं-जो कि पर्याप्त प्रदर्शन नहीं करता है, तो आप इसे router का उपयोग कर स्केल कर सकते हैं।

अब अपने प्रश्न का उत्तर देने के लिए: प्रत्येक माता-पिता को अपने बच्चों को बनाने की आवश्यकता होती है, जिसका अर्थ यह है कि इसे एक ही तरीके से करना चाहिए या दूसरे को ऐसा करने के लिए कोड होना चाहिए। आप इसके हिस्सों को कॉन्फ़िगर करने योग्य बनाने के लिए पदानुक्रम के नीचे Props पास कर सकते हैं, लेकिन आपको what supervision means के आसपास काम नहीं करना चाहिए; खुद से पूछें कि क्या हो सकता है यदि पत्तियों में से एक विफल हो जाती है, और फिर खुद से पूछें कि क्या आपकी अनुमानित पत्तियों को फिर से शुरू किया जाना चाहिए और/या एक मध्यवर्ती अभिनेता को फिर से शुरू किया जाना चाहिए।

+0

मुझे लगता है कि सैद्धांतिक रूप से यह एक अच्छा जवाब है, हालांकि मैं मदद नहीं कर सकता लेकिन ध्यान दें कि बड़े अभिनेता सिस्टम पदानुक्रमों से कितना स्पेगेटी कोड परिणाम। प्रश्न में उल्लिखित एक केंद्रीय विन्यास व्यावहारिक सॉफ्टवेयर उद्देश्यों के लिए समग्र पदानुक्रम की स्पष्ट समझ के लिए एक तंत्र प्रदान कर सकता है। क्या आप जटिल पदानुक्रमों को स्पष्ट करने के लिए कुछ वैकल्पिक विधि की सिफारिश करेंगे? या यह सिर्फ माता-पिता के अभिनेता संबंधों को कैसे दिया जाना चाहिए? –

+0

मेरे लिए इसका उत्तर देना मुश्किल है क्योंकि ऐसा लगता है कि मेरे पास ऐसा संदर्भ नहीं है जो मेरे पास नहीं है। अभिनेता प्रणालियों को कुछ कार्यक्षमता प्रदान करने वाले उपट्री में संरचित होते हैं, इस अर्थ में वे बहुत मॉड्यूलर होते हैं। इन सबोडोड्यूल में से प्रत्येक के लिए प्रवेश बिंदु इसका शीर्ष अभिनेता है, जो प्रभावी रूप से इसकी पूरी उप-धारा है। मैं देख सकता हूं कि बाहर से उपट्री के भीतर अभिनेताओं को स्थापित करने की कोशिश करके इस मॉडल को तोड़ने से स्पेगेटी कोड उत्पन्न होगा, क्योंकि यह बस करने के लिए नहीं है। जब भी एक अभिनेता को बच्चा बनाने की ज़रूरत होती है, तो उदाहरण के लिए यह कॉन्फ़िगरेशन को देख सकता है कि यह कैसे किया जाए। –