akka stream toMat

时间:2016-03-05 18:53:07

标签: scala akka streaming akka-stream

我想了解akka流媒体中的maM是什么。例如:

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 vs via的用途是什么?
  2. 什么是toMat在viaMat和toMat之间做什么?
  3. keep.both的用途是什么,这是否意味着我可以从之前和当前的一个实现价值,如果是,那么我将如何获得这些价值。
  4. 由于 阿伦

2 个答案:

答案 0 :(得分:24)

  1. via只是viaMat(...)(Keep.left)的快捷方式,实际上这就是它的实现方式:NORMAL_MODE

  2. toMat与viaMat相同,但对于接收器,它允许您保持左侧(源/流)或右侧(接收器)侧或两者的物化值

  3. Keep.both只是override def via[T, Mat2](flow: Graph[FlowShape[Out, T], Mat2]): Repr[T] = viaMat(flow)(Keep.left)的别名,这是一个获取两个输入参数并将它们作为元组返回的函数。当组合两个流(或源和流或流和汇等)时,它曾经具有左侧和右侧的物化值

  4. 我会剖析您的代码行:

    (a:A,b:B) => (a, b)

    当您连接流的两个部分(即源和流/接收器或流和接收器)时,每个部分都具有在运行流时获得的物化值。与via / to组合时的默认行为是保持左侧。如果你使用viaMat / toMat,你可以选择将正确的物化值或两者保持为元组。

答案 1 :(得分:2)

我可以从akka-user组获得的一些细节

https://groups.google.com/forum/#!topic/akka-user/Ofnx_XzWrTU