如何解决使用Akka流从服务器下载二进制数据
在使用流时,我开始将下载处理抽象为RunnableGraph
。
在此Graph
中,我使用一个URL来开始下载过程,我从URL中请求一个HttpResponse
并评估StatusCode
。如果有一个Redirect
响应,我的流程会将Location
标头值提供给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
)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。