将akka流多路复用成两个副本

时间:2018-11-22 04:07:11

标签: scala akka-stream akka-http

我正在尝试将流式源缓存到磁盘,同时也将其作为HttpResponse发送出去,即我有一个Source[ByteString,_]我想交给HttpEntity ,但我也想将相同的数据运行到FileIO.toPath接收器中。

                       |-> FileIO.toPath
Source[ByteString,_] ->|
                       |-> HttpEntity(contentType, Source[ByteString,_]

我似乎应该使用Broadcast进行扇出,但根据描述,它写入两个接收器,而FileIO.toPath是接收器,HttpEntity期望有{{ 1}}。

还有Source似乎可以从GraphStage创建源,例如Source.fromGraph阶段,但我不太清楚如何获得Broadcast下沉在那里。

1 个答案:

答案 0 :(得分:0)

您可以使用alsoTo

val originalSource: Source[ByteString, _] = ???
val cachedSource: Source[ByteString, _] = originalSource.alsoTo(FileIO.toPath(/*...*/))
val entity = HttpEntity(contentType, cachedSource)