Spring WebClient代理响应并将其转发到另一台服务器

时间:2019-12-16 17:46:52

标签: spring-boot spring-webflux project-reactor reactor-netty spring-async

我正在尝试使用Spring WebFlux WebClient检索大型二进制文件。我返回了Mono<DataBuffer>并尝试将POST传送到服务器。

Mono<DataBuffer> data = ... 

MultipartBodyBuilder bodyBuilder = new MultipartBodyBuilder();
bodyBuilder.asyncPart("file", data, DataBuffer.class);

response = webClient.post()
                .uri(...)
//                .body(BodyInserters.fromMultipartData(data))
//                .body(data, DataBuffer.class)
//                .body(BodyInserters.fromDataBuffers(data))
                .bodyValue(bodyBuilder.build())
                .headers(
                        httpHeaders -> httpHeaders.addAll(headers)
                ).exchange()
                .flatMap(
                        clientResponse -> {
                            ...
                        }
                )
                .block();

从我观察到的结果来看,响应是在将其POST发送到服务器之前已完全获取的(有时我观察到408 s;通过WireShark查看这些数据包似乎没有交织)。有没有办法使它以内存效率更高的方式工作,并在完全获取响应之前开始发送请求?

PS。不确定是否相关,但是不幸的是,该应用程序是同时具有Spring MVC和WebFlux(具有Spring自动配置前者)的Spring mishmash

编辑:根据代码注释,reactor.netty.http.client.HttpClient默认情况下应使用分块编码,因此我想知道我在做什么错

0 个答案:

没有答案