2016-06-13 81 views
1

我使用Akka 2.4.7來讀取一個Web資源,它本質上是一個JSON對象流,用換行符分隔。溪流的大小實際上是無限的。如何在Akka-http(客戶端)HttpRequest中使用.withoutSizeLimit?

當週圍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. 

「實際的實體尺寸(無)」似乎有點滑稽,但我真正的問題是,如何使用HttpEntity.withSizeLimit(或在我的情況下,而應該在那裏,.withoutSizeLimit)。

我的要求的代碼是這樣的:

val chunks_src: Source[ByteString,_] = Source.single(req) 
    .via(connection) 
    .flatMapConcat(_.entity.dataBytes) 

我嘗試添加一個.map((x: HttpResponse) => x.withoutSizeLimit),但它不會編譯。無論如何,在做客戶端編程時HttpEntity有什麼作用?

我可以改變全局配置,但這是有點錯過了重點。我只想爲特定請求標記「無限制」。

作爲進一步的問題,我理解在服務器端需要一個max-content-length,但爲什麼會影響客戶端?

參考文獻:

回答

1

我根本不是在這個方面的專家,但它似乎你需要將.withoutSizeLimit()添加到實體中,例如:

Source.single(req) 
    .via(connection) 
    .flatMapConcat(_.entity.withoutSizeLimit().dataBytes) 
+0

謝謝。不幸的是,我不再在該代碼上積極工作。希望別人覺得這很有用。 – akauppi