2016-03-05 6 views
13

मैं समझने के लिए अक्का स्ट्रीमिंग में Tomat करता है कोशिश कर रहा हूँ स्ट्रीम। उदाहरण के लिए:अक्का को mat

val sink1:Sink[Int, Future[Int]]=Sink.fold[Int,Int](0)(_ + _) 

val flow=Flow[Int].fold[Int](0){(x,y)=> x+y} 

val runnable = Source (1 to 10).viaMat(flow)(Keep.right).toMat(sink1)(Keep.both) 
  1. क्या viaMat के उपयोग के माध्यम बनाम है?
  2. क्या है को mat को mat को viaMat के बीच कर रहा है?
  3. क्या keep.both का प्रयोग होता है, इसका मतलब यह है कि मैं मान हो सकता है यदि हाँ तो कैसे मैं उन मूल्यों को वापस प्राप्त कर सकते पिछले और मौजूदा से materialized।

धन्यवाद अरुण

+0

यह निम्न वैल runnable (दोनों चटाई रखने) के रूप में वापसी करना चाहिए: RunnableGraph [(वादा [विकल्प [इंट]], भविष्य [ इंट])] = स्रोत (1 से 10) .viaMat (प्रवाह) (Keep.right) .toMat (sink1) (Keep.both) .run() – ASe

उत्तर

12
  1. के माध्यम से सिर्फ viaMat (...) (Keep.left) के लिए एक शॉर्टकट है, और वास्तव में यह है कि यह कैसे लागू किया गया है: override def via[T, Mat2](flow: Graph[FlowShape[Out, T], Mat2]): Repr[T] = viaMat(flow)(Keep.left)

  2. को mat viaMat के समान है लेकिन सिंक के लिए, यह आपको भौतिक मूल्य को बाएं (स्रोत/प्रवाह) या दाएं (सिंक) पक्ष से या

  3. Keep.both केवल एक अल है ias (a:A,b:B) => (a, b) के लिए, यह एक ऐसा फ़ंक्शन है जो दो इनपुट पैरामीटर लेता है और उन्हें टुपल के रूप में वापस कर देता है।

    // you're keeping the materialized value of flow 
    val source2 = Source (1 to 10).viaMat(flow)(Keep.right) 
    // you're keeping both materialized values, i.e. the one of flow from previous step 
    // and the one o sink.  
    val runnableGraph = source2.toMat(sink)(Keep.both) 
    runnableGraph.run() // returns a tuple (flowMatVal, sinkMatVal) 
    
    : यह है जब दो प्रवाह के संयोजन दोनों को छोड़ दिया और सही पक्ष के materialized मूल्य के लिए (या स्रोत और प्रवाह या प्रवाह और सिंक आदि)

मैं कोड के अपने लाइन काटना जाएगा प्रयोग किया जाता है

आप एक प्रवाह के दो हिस्सों में शामिल होने के (यानी स्रोत और प्रवाह/सिंक या प्रवाह और सिंक) उनमें से हर एक materialized मूल्य है कि आप जब आप प्रवाह चलाने है जब। बाएं तरफ रखते हुए/से संयोजन करते समय डिफ़ॉल्ट व्यवहार। यदि आपमैट/toMat के माध्यम से उपयोग करते हैं तो आप सही भौतिक मूल्य या दोनों को टुपल के रूप में रखना चुन सकते हैं।

+0

धन्यवाद। मैं भौतिक मूल्य को समझने में सक्षम नहीं हूं, मैं स्रोत को बिल्कुल एक आउटपुट जानता हूं और वास्तव में एक इनपुट सिंक करता हूं, और यहां मैट क्या है? नीचे कोड मुझे टपल सही वापस जाने के लिए लगता है ... क्या आप मेरी मदद कर सकते हैं मैं उन कैसे मुद्रित कर सकते हैं: वैल source1 = स्रोत (1 से 10) वैल सिंक: सिंक [इंट, भविष्य [इंट]] = Sink.fold [Int, int] (0) (_ + _) वैल रननेबलग्राफ = स्रोत 1.toमैट (सिंक) (Keep.both) वैल x = runnableGraph.run() – ASe

+0

भौतिक मूल्य वह है जो आपको मिलता है जब आप runnableGraph.run() करते हैं। उदाहरण के लिए, यदि आप सिंक.फोल्ड का उपयोग करते हैं, तो यह भविष्य है जिसमें फोल्डिंग का परिणाम होता है। इस पढ़ें: http://doc.akka.io/docs/akka/2.4.2/general/stream/stream-design.html –

+0

धन्यवाद एक बहुत। मैं से http://doc.akka.io/docs/akka-stream-and-http-experimental/2.0.3/scala/stream-quickstart.html#materialized-values ​​ materialized मूल्यों को पढ़ने अगर मैं सही ढंग से समझ में आ - स्रोत [+ आउट, + मैट], फ्लो [-इन, + आउट, + मैट] और सिंक [-इन, + मैट] पर मैट टाइप पैरामीटर रन टाइम हैं। – ASe