Завершите маршрут с источником и получите его материализованную ценность

#akka-stream #akka-http

Вопрос:

Есть маршрут, который проходит примерно так:

 val route = 
  path("data") {
    get {
      val src: Source[ByteString, BoundedSourceQueue[ByteString]] = ???
      complete(HttpEntity(ContentTypes.`application/octet-stream`, src))
    }
  }
 

Как я могу получить доступ к материализованной ценности этого источника?

Комментарии:

1. Чтобы получить материализованное значение, вам нужно будет загрузить все в память, что звучит опасно из-за потенциального ООМ. Какую проблему вы хотели бы решить?

2. Что? Материализованное значение становится доступным, как только запускается график.

Ответ №1:

Преждевременная src материализация должна сделать свое дело.

 // will need an implicit ActorSystem/ActorMaterializer in scope
val baseSrc: Source[ByteString, BoundedSourceQueue[ByteString]] = ???
val (bsq, src) = baseSrc.preMaterialize()
// do stuff with bsq...
complete(HttpEntity(ContentTypes.`application/octet-stream`, src))