【问题标题】:Tapir with Akka HTTP file upload - Sending an 2xx 'early' response before end of request was received使用 Akka HTTP 文件上传的 Tapir - 在收到请求结束之前发送 2xx 的“早期”响应
【发布时间】:2021-11-06 06:05:08
【问题描述】:

我使用 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 的“早期”响应

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

【问题讨论】:

  • 您的端点输入是流/文件?不是输出。这就是你想要的?
  • 还与我们分享完整的端点描述:输出是什么?你怎么称呼你的端点?

标签: scala akka-stream akka-http tapir


【解决方案1】:

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

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

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

我通过过滤 LastChunk 并将其连接到流的末尾 - 在 MessageEnd 之后解决它,从而迫使 akka-http 使用 MessageEnd

【讨论】:

  • 你说这是 Akka HTTP Tapir 集成中的错误吗?值得在 Tapir 上打开一个问题吗?
  • 不,这是 akka-http 中的错误。 Tapir 可以解决它,但仍然 - akka-http 中有一个错误
猜你喜欢
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 2012-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多