使用 akka 流从服务器下载二进制数据

using akka streams for downloading binary data from server

在使用流时,我开始将我的下载处理抽象为 RunnableGraph

在这个 Graph 中,我使用一个 url 开始我的下载过程,我从 url 请求一个 HttpResponse 并评估 StatusCode。如果有 Redirect 响应,我的进程会将 Location header 值提供给 requestProcessor 并尝试再次下载它。 如果接收到 200,我的进程会累积二进制并将其发送到我的接收器。

我的问题:here 是我的推送语句,那个接收器永远不会收到任何数据:(

我希望我的习惯FlowShape写对了,但可能隐藏了一个问题。

getAsyncCallback 适用于我的问题 jrudolph 如何在评论中描述。

将代码更改为:

def onGrab(current: HttpResponse): Unit = {
   if (redirectCodes.contains(current.status) && current.header[Location].isDefined) {
     push[String](redirect, current.header[Location].get.value())
     current.entity.discardBytes()
     pull(in)
   } else {
     logger.debug("download . . .")
     current
       .entity
       .dataBytes
       .map(_.toArray)
       .runWith(Sink.head)
       .foreach(
         getAsyncCallback[Array[Byte]](value => push(out, value)).invoke
     )
   }
}