scala - corriente akka toMat
streaming akka-stream (2)
via es solo un atajo para viaMat (...) (Keep.left), y de hecho así es como se implementa:
override def via[T, Mat2](flow: Graph[FlowShape[Out, T], Mat2]): Repr[T] = viaMat(flow)(Keep.left)
toMat es el mismo que viaMat pero para los sumideros, le permite mantener el valor materializado desde el lado izquierdo (fuente / flujo) o derecho (sumidero) o ambos
Keep.both es solo un alias para
(a:A,b:B) => (a, b)
, que es una función que toma los dos parámetros de entrada y los devuelve como una tupla. Se usa para tener el valor materializado del lado izquierdo y derecho cuando se combinan dos flujos (o fuente y flujo o flujo y sumidero, etc.)
Diseccionaré tu línea de código:
// 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)
Cuando se unen dos partes de un flujo (es decir, fuente y flujo / sumidero o flujo y sumidero), cada una de ellas tiene un valor materializado que se obtiene cuando se ejecuta el flujo. El comportamiento predeterminado cuando se combina con via / to es mantener el lado izquierdo. Si utiliza viaMat / toMat, puede optar por mantener el valor materializado correcto o ambos como una tupla.
Estoy tratando de entender lo que hace toMat en la transmisión de akka. Por ejemplo:
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)
- ¿Qué es el uso de viaMat vs via?
- ¿Qué está haciendo toMat entre viaMat y toMat?
- ¿Cuál es el uso de keep.both? ¿Significa que puedo materializar el valor anterior y el actual, si es así, cómo puedo recuperar esos valores?
Gracias arun
Algunos detalles que pude obtener de un grupo de usuarios de akka
https://groups.google.com/forum/#!topic/akka-user/Ofnx_XzWrTU