Akka Stream:结合`Flow [T,T2,M] + Sink [T2,M2]`得到`Sink [T,M2]`

时间:2017-02-24 16:38:12

标签: scala akka akka-stream

给出简单的源/汇/流:

val source: Source[Int, NotUsed] = Source(1 to 5)
val sink: Sink[Any, Future[Done]] = Sink.foreach(println)

val intDoublerFlow: Flow[Int, Int, NotUsed] = Flow.fromFunction[Int, Int](i => i * 2)

我可以将Source[T, M]Flow[T, T2, M2]合并,并使用Source[T2, M2]方法获得via

val sourceWithFlow: Source[Int, NotUsed] = source.via(intDoublerFlow)

如何执行类似操作并将Flow[T, T2, M]Sink[T2, M2]合并以获取Sink[T, M2]

val sinkWithFlow: Sink[Int, Future[Done]] = ???

1 个答案:

答案 0 :(得分:1)

你希望通过保持后者的物化价值来构建你的流量和汇。默认情况下,流畅的DSL将保留前者的物化价值,简单的intDoubleFlow.to(sink)将无效。您需要明确使用toMat并强制执行Keep.Right

结果代码是:

val sinkWithFlow: Sink[Int, Future[Done]] = intDoublerFlow.toMat(sink)(Keep.right)

有关物化价值的组成图表阶段的更多信息可以找到here

相关问题