Мультиплексный акка потокового источника в две копии - PullRequest
0 голосов
/ 22 ноября 2018

Я пытаюсь кэшировать потоковый источник на диск, в то время как я также отправляю его как HttpResponse, т.е. у меня есть Source[ByteString,_], который я хочу передать HttpEntity, но я также хочузапустить те же данные в FileIO.toPath приемник.

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

Кажется, что Broadcast - это то, что я должен использовать для разветвления, но из описания он записывает в два приемника, и пока FileIO.toPathявляется приемником, HttpEntity ожидает Source.

Существует также Source.fromGraph, который выглядит так, как будто бы он создает источник из GraphStage, например, Broadcast, но я не могувыясните, как я могу получить там FileIO раковину.

1 Ответ

0 голосов
/ 23 ноября 2018

Вы можете использовать alsoTo:

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