2016-12-13 7 views
5

मैं अक्का धाराओं के लिए स्रोत प्रकार को समझने की कोशिश कर रहा हूं, निर्दिष्ट hereस्रोत <Out,Mat> का प्रकार पैरामीटर क्या है?

दुर्भाग्य से, मैंने पाया है कि प्रलेखन और उदाहरणों में यह नहीं बताया गया है कि प्रत्येक प्रकार के पैरामीटर वास्तव में क्या मतलब है। मुझे लगता है कि Out वह प्रकार है जिस पर स्रोत भौतिक रूप से निकलता है। क्या वो सही है? अन्य प्रकार पैरामीटर Mat क्या है?

उत्तर

6

आप सही कर रहे हैं बाहर, इस तत्व है जो Source द्वारा उत्सर्जित होती हैं के प्रकार है।

चटाई

यह Source के materialisation का प्रकार है। ध्यान दें कि प्रत्येक चरण (Flow एस, Sink एस, आदि) एक मूल्य के साथ भी पूरा हो जाएगा। यह अनिवार्य रूप से चरण के बाद चरण का एक उपज है।

आप इसे चलते समय चरण के साथ बातचीत करने के साधन के रूप में चित्रित कर सकते हैं। अक्का द्वारा प्रस्तावित तैयार किए गए Source एस के उदाहरणों को देखते हुए इसका सारांश प्राप्त करने का एक अच्छा तरीका है।

  • Source.singleNotUsed को अमल में लाना होगा। आपको स्रोत के साथ बातचीत करने का कोई मतलब नहीं है, क्योंकि यह केवल एक तत्व का उत्पादन करेगा और फिर पूरा होगा।

  • Source.queueSourceQueue पर पूरा हो जाएगा। यह एक और दिलचस्प मामला है, क्योंकि आप स्रोत के साथ offer संदेश भेज सकते हैं। संदेश offer स्रोत द्वारा उत्सर्जित किए जाएंगे।

  • Source.maybePromise पर पूरा हो जाएगा। स्रोत को नियंत्रित करने के लिए आप Promise का उपयोग कर सकते हैं और इसे एक तत्व, या None उत्सर्जित कर सकते हैं।

जब आप विभिन्न चरणों को जोड़ते हैं, तो ध्यान दें कि प्रत्येक चरण में संभावित रूप से उपयोगी भौतिक मूल्य हो सकता है। आपको viaMat/toMat और Keep DSL का उपयोग कर चुनने के लिए चुनना होगा। एक या अधिक भौतिक मान वापस लौटाए जाएंगे जब run() को रचना ग्राफ पर बुलाया जाता है।

नीचे के उदाहरणों में प्रकारों पर एक नज़र ले रहा है सबसे अच्छा तरीका है एपीआई का सार प्राप्त करने के लिए है:

val source: Source[Int, MatSrc] 
    val sink: Sink[Int, MatSnk] 

    val matSrc: MatSrc = source.toMat(sink)(Keep.left).run() 
    val matSnk: MatSnk = source.toMat(sink)(Keep.right).run() 
    val (m1: MatSrc, m2: MatSnk) = source.toMat(sink)(Keep.both).run() 
    val n: NotUsed = source.toMat(sink)(Keep.none).run() 

ध्यान दें कि अधिक संक्षिप्त डीएसएल जो आप कई उदाहरण में पा सकते हैं वास्तव में एक शॉर्टकट है उपरोक्त के लिए, जहां केवल अंतिम चरण (जैसे सिंक) का भौतिक मूल्य रखा जाता है।

val mat3: Mat3 = source.viaMat(flow)(Keep.right).toMat(sink)(Keep.right).run() 

आगे पढ़ने के लिए नीचे दिए गए डॉक्स देखें के रूप में

val mat3: Mat3 = source.via(flow).runWith(sink) 

में ही है।

http://doc.akka.io/docs/akka/2.4/java/stream/stream-quickstart.html#Materialized_values

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