给出简单的源/汇/流:
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]] = ???
答案 0 :(得分:1)
你希望通过保持后者的物化价值来构建你的流量和汇。默认情况下,流畅的DSL将保留前者的物化价值,简单的intDoubleFlow.to(sink)
将无效。您需要明确使用toMat
并强制执行Keep.Right
。
结果代码是:
val sinkWithFlow: Sink[Int, Future[Done]] = intDoublerFlow.toMat(sink)(Keep.right)
有关物化价值的组成图表阶段的更多信息可以找到here。