Merge timout update
This commit is contained in:
@@ -19,9 +19,12 @@ package org.springframework.cloud.gateway.filter;
|
|||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import io.netty.handler.codec.http.DefaultHttpHeaders;
|
import io.netty.handler.codec.http.DefaultHttpHeaders;
|
||||||
import io.netty.handler.codec.http.HttpMethod;
|
import io.netty.handler.codec.http.HttpMethod;
|
||||||
|
import io.netty.handler.timeout.ReadTimeoutException;
|
||||||
|
import io.netty.handler.timeout.ReadTimeoutHandler;
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
import reactor.netty.NettyPipeline;
|
import reactor.netty.NettyPipeline;
|
||||||
@@ -103,6 +106,13 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered {
|
|||||||
HttpClient client = chunkedTransfer? this.httpClient.chunkedTransfer() :
|
HttpClient client = chunkedTransfer? this.httpClient.chunkedTransfer() :
|
||||||
this.httpClient.noChunkedTransfer();
|
this.httpClient.noChunkedTransfer();
|
||||||
|
|
||||||
|
boolean hasResponseTimeout = properties.getResponseTimeout() != null;
|
||||||
|
if (hasResponseTimeout) {
|
||||||
|
client = client.tcpConfiguration(tcpClient ->
|
||||||
|
tcpClient.doOnConnected(c ->
|
||||||
|
c.addHandlerFirst(new ReadTimeoutHandler(properties.getResponseTimeout().toMillis(), TimeUnit.MILLISECONDS))));
|
||||||
|
}
|
||||||
|
|
||||||
Flux<HttpClientResponse> responseFlux = client
|
Flux<HttpClientResponse> responseFlux = client
|
||||||
.request(method)
|
.request(method)
|
||||||
.uri(url)
|
.uri(url)
|
||||||
@@ -150,13 +160,11 @@ public class NettyRoutingFilter implements GlobalFilter, Ordered {
|
|||||||
return Mono.just(res);
|
return Mono.just(res);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (properties.getResponseTimeout() != null) {
|
return responseFlux
|
||||||
//TODO: figure out how to make this a 504
|
.onErrorMap(t -> hasResponseTimeout && t instanceof ReadTimeoutException,
|
||||||
responseFlux = responseFlux.timeout(properties.getResponseTimeout(),
|
//TODO: figure out how to make this a 504
|
||||||
Mono.error(new TimeoutException("Response took longer than timeout: " +
|
t -> new TimeoutException("Response took longer than timeout: " +
|
||||||
properties.getResponseTimeout())));
|
properties.getResponseTimeout()))
|
||||||
}
|
.then(chain.filter(exchange));
|
||||||
|
|
||||||
return responseFlux.then(chain.filter(exchange));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user