1

我使用tapir + akka http 作为服务。端点之一下载文件。

val load
      : Endpoint[Source[ByteString, Any], Any, Any, AkkaStreams] =
    endpoint
      .post
      .in("load")
      .in(streamBody(AkkaStreams)(
        Schema(Schema.schemaForByteArray.schemaType),
        CodecFormat.OctetStream()
      ))
      .out(???)

刚开始警告

在收到请求结束之前发送 2xx 的“早期”响应

我如何使用貘处理这个问题?

4

1 回答 1

2

这是 akka-http 的问题:https ://github.com/akka/akka-http/issues/2455

Source在代码中使用块吗?Akka-http 消费消息,当LastChunk被消费时,它发送响应,甚至不消费MessageEnd后面的LastChunk.

MessageEnd未消耗,因此messageEndPending设置为true有关早期响应的警告。

我通过过滤LastChunk并将其连接到流的末尾来解决它 - afterMessageEnd并因此强制 akka-http 使用MessageEnd.

于 2021-09-09T21:06:32.327 回答