Adds option to configure connect timeout.
This commit is contained in:
@@ -20,6 +20,16 @@ package org.springframework.cloud.gateway.config;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import com.netflix.hystrix.HystrixObservableCommand;
|
||||
import io.netty.channel.ChannelOption;
|
||||
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.ipc.netty.http.client.HttpClient;
|
||||
import reactor.ipc.netty.http.client.HttpClientOptions;
|
||||
import reactor.ipc.netty.options.ClientProxyOptions;
|
||||
import reactor.ipc.netty.resources.PoolResources;
|
||||
import rx.RxReactiveStreams;
|
||||
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnEnabledEndpoint;
|
||||
@@ -38,11 +48,11 @@ import org.springframework.cloud.gateway.filter.AdaptCachedBodyGlobalFilter;
|
||||
import org.springframework.cloud.gateway.filter.ForwardPathFilter;
|
||||
import org.springframework.cloud.gateway.filter.ForwardRoutingFilter;
|
||||
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||
import org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter;
|
||||
import org.springframework.cloud.gateway.filter.NettyRoutingFilter;
|
||||
import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter;
|
||||
import org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter;
|
||||
import org.springframework.cloud.gateway.filter.WebsocketRoutingFilter;
|
||||
import org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter;
|
||||
import org.springframework.cloud.gateway.filter.factory.AddRequestHeaderGatewayFilterFactory;
|
||||
import org.springframework.cloud.gateway.filter.factory.AddRequestParameterGatewayFilterFactory;
|
||||
import org.springframework.cloud.gateway.filter.factory.AddResponseHeaderGatewayFilterFactory;
|
||||
@@ -115,19 +125,9 @@ import org.springframework.web.reactive.socket.client.WebSocketClient;
|
||||
import org.springframework.web.reactive.socket.server.WebSocketService;
|
||||
import org.springframework.web.reactive.socket.server.support.HandshakeWebSocketService;
|
||||
|
||||
import com.netflix.hystrix.HystrixObservableCommand;
|
||||
|
||||
import static org.springframework.cloud.gateway.config.HttpClientProperties.Pool.PoolType.DISABLED;
|
||||
import static org.springframework.cloud.gateway.config.HttpClientProperties.Pool.PoolType.FIXED;
|
||||
|
||||
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.ipc.netty.http.client.HttpClient;
|
||||
import reactor.ipc.netty.http.client.HttpClientOptions;
|
||||
import reactor.ipc.netty.options.ClientProxyOptions;
|
||||
import reactor.ipc.netty.resources.PoolResources;
|
||||
import rx.RxReactiveStreams;
|
||||
|
||||
/**
|
||||
* @author Spencer Gibb
|
||||
*/
|
||||
@@ -152,6 +152,10 @@ public class GatewayAutoConfiguration {
|
||||
public Consumer<? super HttpClientOptions.Builder> nettyClientOptions(HttpClientProperties properties) {
|
||||
return opts -> {
|
||||
|
||||
if (properties.getConnectTimeout() != null) {
|
||||
opts.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, properties.getConnectTimeout());
|
||||
}
|
||||
|
||||
// configure ssl
|
||||
HttpClientProperties.Ssl ssl = properties.getSsl();
|
||||
|
||||
|
||||
@@ -26,6 +26,9 @@ import reactor.ipc.netty.resources.PoolResources;
|
||||
@ConfigurationProperties("spring.cloud.gateway.httpclient")
|
||||
public class HttpClientProperties {
|
||||
|
||||
/** The connect timeout in millis, the default is 45s. */
|
||||
private Integer connectTimeout;
|
||||
|
||||
/** Pool configuration for Netty HttpClient */
|
||||
private Pool pool = new Pool();
|
||||
|
||||
@@ -35,6 +38,14 @@ public class HttpClientProperties {
|
||||
/** SSL configuration for Netty HttpClient */
|
||||
private Ssl ssl = new Ssl();
|
||||
|
||||
public Integer getConnectTimeout() {
|
||||
return connectTimeout;
|
||||
}
|
||||
|
||||
public void setConnectTimeout(Integer connectTimeout) {
|
||||
this.connectTimeout = connectTimeout;
|
||||
}
|
||||
|
||||
public Pool getPool() {
|
||||
return pool;
|
||||
}
|
||||
@@ -208,8 +219,10 @@ public class HttpClientProperties {
|
||||
@Override
|
||||
public String toString() {
|
||||
return "HttpClientProperties{" +
|
||||
"pool=" + pool +
|
||||
"connectTimeout=" + connectTimeout +
|
||||
", pool=" + pool +
|
||||
", proxy=" + proxy +
|
||||
", ssl=" + ssl +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,13 +20,13 @@ package org.springframework.cloud.gateway.config;
|
||||
import io.netty.handler.ssl.SslContext;
|
||||
import org.junit.Test;
|
||||
import reactor.ipc.netty.http.client.HttpClient;
|
||||
import reactor.ipc.netty.http.client.HttpClientOptions;
|
||||
import reactor.ipc.netty.options.ClientProxyOptions;
|
||||
import reactor.ipc.netty.resources.PoolResources;
|
||||
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;
|
||||
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
|
||||
import reactor.ipc.netty.http.client.HttpClientOptions;
|
||||
import reactor.ipc.netty.options.ClientProxyOptions;
|
||||
import reactor.ipc.netty.resources.PoolResources;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@@ -61,6 +61,7 @@ public class GatewayAutoConfigurationTests {
|
||||
.withConfiguration(AutoConfigurations.of(WebFluxAutoConfiguration.class,
|
||||
GatewayAutoConfiguration.class))
|
||||
.withPropertyValues("spring.cloud.gateway.httpclient.ssl.use-insecure-trust-manager=true",
|
||||
"spring.cloud.gateway.httpclient.connect-timeout=10",
|
||||
"spring.cloud.gateway.httpclient.pool.type=fixed",
|
||||
"spring.cloud.gateway.httpclient.proxy.host=myhost")
|
||||
.run(context -> {
|
||||
|
||||
Reference in New Issue
Block a user