Add zero copy support in reactor-based WebClient
This commit makes Reactor Netty `WebClient` instances support zero-copy requests by implementing `ZeroCopyHttpOutputMessage`. The implementation leverages the optimized `sendFile` mechanism if available.
This commit is contained in:
parent
80979e7592
commit
95b83fe1ba
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
package org.springframework.http.client.reactive;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URI;
|
||||
import java.util.Collection;
|
||||
|
||||
|
|
@ -30,6 +31,7 @@ import org.springframework.core.io.buffer.DataBuffer;
|
|||
import org.springframework.core.io.buffer.DataBufferFactory;
|
||||
import org.springframework.core.io.buffer.NettyDataBufferFactory;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.ZeroCopyHttpOutputMessage;
|
||||
|
||||
/**
|
||||
* {@link ClientHttpRequest} implementation for the Reactor-Netty HTTP client.
|
||||
|
|
@ -38,7 +40,7 @@ import org.springframework.http.HttpMethod;
|
|||
* @since 5.0
|
||||
* @see reactor.ipc.netty.http.client.HttpClient
|
||||
*/
|
||||
public class ReactorClientHttpRequest extends AbstractClientHttpRequest {
|
||||
public class ReactorClientHttpRequest extends AbstractClientHttpRequest implements ZeroCopyHttpOutputMessage {
|
||||
|
||||
private final HttpMethod httpMethod;
|
||||
|
||||
|
|
@ -89,6 +91,11 @@ public class ReactorClientHttpRequest extends AbstractClientHttpRequest {
|
|||
return Flux.from(dataBuffers).map(NettyDataBufferFactory::toByteBuf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> writeWith(File file, long position, long count) {
|
||||
return doCommit(() -> this.httpRequest.sendFile(file.toPath(), position, count).then());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> setComplete() {
|
||||
return doCommit(() -> httpRequest.sendHeaders().then());
|
||||
|
|
|
|||
Loading…
Reference in New Issue