如何在 Akka-http(客户端)HttpRequest 中使用 .withoutSizeLimit?
How to use .withoutSizeLimit in Akka-http (client) HttpRequest?
我正在使用 Akka 2.4.7 读取网络资源,该资源本质上是 JSON 对象流,用换行符分隔。流的大小实际上是无限的。
当消耗了大约 8MB 时,出现异常:
[error] (run-main-0) EntityStreamSizeException: actual entity size (None) exceeded content length limit (8388608 bytes)! You can configure this by setting `akka.http.[server|client].parsing.max-content-length` or calling `HttpEntity.withSizeLimit` before materializing the dataBytes stream.
"actual entity size (None)" 似乎有点可笑,但我真正的问题是,如何使用 HttpEntity.withSizeLimit
(或者在我的情况下, .withoutSizeLimit
也应该在那里).
我的请求代码是这样的:
val chunks_src: Source[ByteString,_] = Source.single(req)
.via(connection)
.flatMapConcat( _.entity.dataBytes )
我尝试添加一个 .map( (x: HttpResponse) => x.withoutSizeLimit )
,但它无法编译。无论如何,在进行客户端编程时,HttpEntity
的作用是什么?
我可以更改全局配置,但这有点不对劲。我只想针对特定请求标记 "no limits"。
作为进一步的问题,我理解在服务器端需要 max-content-length
,但为什么会影响客户端?
参考文献:
- 阿卡 2.4.7:Limiting message entity length
- 阿卡 2.4.7:HttpEntity
我远不是这个主题的专家,但您似乎需要将 .withoutSizeLimit()
添加到实体中,例如:
Source.single(req)
.via(connection)
.flatMapConcat( _.entity.withoutSizeLimit().dataBytes )
我正在使用 Akka 2.4.7 读取网络资源,该资源本质上是 JSON 对象流,用换行符分隔。流的大小实际上是无限的。
当消耗了大约 8MB 时,出现异常:
[error] (run-main-0) EntityStreamSizeException: actual entity size (None) exceeded content length limit (8388608 bytes)! You can configure this by setting `akka.http.[server|client].parsing.max-content-length` or calling `HttpEntity.withSizeLimit` before materializing the dataBytes stream.
"actual entity size (None)" 似乎有点可笑,但我真正的问题是,如何使用 HttpEntity.withSizeLimit
(或者在我的情况下, .withoutSizeLimit
也应该在那里).
我的请求代码是这样的:
val chunks_src: Source[ByteString,_] = Source.single(req)
.via(connection)
.flatMapConcat( _.entity.dataBytes )
我尝试添加一个 .map( (x: HttpResponse) => x.withoutSizeLimit )
,但它无法编译。无论如何,在进行客户端编程时,HttpEntity
的作用是什么?
我可以更改全局配置,但这有点不对劲。我只想针对特定请求标记 "no limits"。
作为进一步的问题,我理解在服务器端需要 max-content-length
,但为什么会影响客户端?
参考文献:
- 阿卡 2.4.7:Limiting message entity length
- 阿卡 2.4.7:HttpEntity
我远不是这个主题的专家,但您似乎需要将 .withoutSizeLimit()
添加到实体中,例如:
Source.single(req)
.via(connection)
.flatMapConcat( _.entity.withoutSizeLimit().dataBytes )