流式处理请求失败-连接会发生什么?

时间:2019-01-24 13:08:17

标签: scala akka-stream akka-http

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)
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

如果服务器连接出现问题,则连接将自动关闭。