akka http抛出EntityStreamException:实体流截断

时间:2016-03-25 08:59:06

标签: scala akka-http

我正在使用akka http库为rest API编写客户端。该库似乎非常强大,但它对我来说非常不稳定。当我尝试使用HttpResponse.entity时,常常(并非总是)抛出以下异常:

  

EntityStreamException:实体流截断

之后它会停止处理后续请求。也许它试图处理一些背压或演员只是死,我不知道。

使用请求级客户端API发送请求并不重要:

def pollSearchResult(searchId: String): FutureActionResult[String, SearchResult] = {
    val request = HttpRequest(GET, s"http://***/Search/$searchId")

    for {
      response <- Http().singleRequest(request)
      entity <- Unmarshal(response.entity).to[String]
      result = entity.decodeEither[SearchResult]
    } yield result
  }

或使用连接级客户端API:

val client = Http(actorSystem).outgoingConnection("***")

def pollSearchResult(searchId: String): FutureActionResult[String, SearchResult] = {
    val request = HttpRequest(GET, s"Search/$searchId")

    for {
      response <- Source.single(request).via(client).runWith(Sink.head)
      entity <- Unmarshal(response.entity).to[String]
      result = entity.decodeEither[SearchResult]
      } yield result
    }

我是否不会使用unmarshaller使用实体或使用getDataBytes手动使用实体,结果是相同的 - 上述异常。

响应的http状态为200 OK,标题正常,它是&#34;默认&#34;实体(因此,没有分块),内容长度约为500-2000 Kb(增加akka.http.parsing.max-content-length不会有帮助,尽管默认值应该足够)。服务器也没问题 - 其他平台上的其他http库也可以使用这个API。

这是一个错误还是我做错了什么? scala最好的非阻塞,asycnhonous http库是什么?

1 个答案:

答案 0 :(得分:0)

我对最初的问题有评论,但也在这里回答,所以如果这有助于任何人,它可以被投票。

这是一个路由路径问题(是的,严重的)。我有一个嵌套的路线,在某种程度上与同一级别的另一条路线发生冲突(基本上有一种奇怪的原因导致一条路线覆盖另一条路线......)。一旦我重新修改了路线的结构,一切都运转良好。