【发布时间】:2019-01-24 13:08:17
【问题描述】:
akka-http 的文档解释说,完全使用请求流很重要,因为未拉取的字节将被解释为背压 (https://doc.akka.io/docs/akka-http/current/implications-of-streaming-http-entity.html)。当您事先知道流可以被忽略时,您应该使用discardEntityBytes,或者完全阅读它。还可以选择通过将流附加到Sink.cancelled 来关闭连接。
我的问题是当流失败时会发生什么。
- 流已耗尽还是连接已关闭?还是实现的责任是从错误中恢复并耗尽或关闭连接?如果是这样,什么是一个好的代码模式?
- 使用
Future完成请求或响应是否流式传输是否重要? - 如果您在流的中途确定可以忽略流的其余部分,而不是意外失败,该怎么办。抛出异常是停止流处理的好方法吗?
用未来完成的例子:
val route =
post {
extractDataBytes { data =>
complete {
data
.via(flow1)
.via(flow2) // say error happens here at some point
.runwWith(sink)
}
}
}
【问题讨论】:
标签: scala akka-stream akka-http