我尝试使用RxNetty
我写了一些愚蠢的东西,如
@RequestMapping(method = RequestMethod.GET, path = "largeFile")
public DeferredResult<ResponseEntity<byte[]>> largeFile() throws IOException {
Observable<ResponseEntity<byte[]>> observable = RxNetty.createHttpGet(URL)
.flatMap(AbstractHttpContentHolder::getContent)
.map(data -> {
byte[] bytes = new byte[data.readableBytes()];
data.readBytes(bytes);
return new ResponseEntity<>(bytes, HttpStatus.OK);
});
DeferredResult<ResponseEntity<byte[]>> deferredResult = new DeferredResult<>();
observable.subscribe(deferredResult::setResult, deferredResult::setErrorResult);
return deferredResult;
}
然而,我有以下错误:
Caused by: io.netty.handler.codec.TooLongFrameException: HTTP content length exceeded 1048576 bytes.
答案 0 :(得分:1)
RxNetty 0.4.x中的默认客户端聚合HTTP有效负载,该有效负载对最大内容长度有限制。您看到的例外是因为该限制。您可以使用PipelineConfigurator更改默认客户端,如下例所示:
之后,有效载荷将被分成多个缓冲区。
或者,如果您知道最大大小,则可以在配置程序中使用适当的有效负载聚合器。