get timeout from property source (#3965)

I try solve the problem getting values from environment, if have any other way to do that please ping me.

Fixes #3786
This commit is contained in:
Felipe Adorno
2021-02-17 19:38:43 -03:00
committed by GitHub
parent f2526d5e03
commit df7ecf81c9
2 changed files with 46 additions and 5 deletions

View File

@@ -25,6 +25,7 @@ import com.netflix.client.RetryHandler;
import com.netflix.client.config.CommonClientConfigKey;
import com.netflix.client.config.DefaultClientConfigImpl;
import com.netflix.client.config.IClientConfig;
import com.netflix.client.config.IClientConfigKey;
import com.netflix.loadbalancer.ConfigurationBasedServerList;
import com.netflix.loadbalancer.DummyPing;
import com.netflix.loadbalancer.ILoadBalancer;
@@ -52,6 +53,7 @@ import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpRibbonConfiguration
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.core.env.Environment;
import static com.netflix.client.config.CommonClientConfigKey.DeploymentContextBasedVipAddresses;
import static org.springframework.cloud.netflix.ribbon.RibbonUtils.setRibbonProperty;
@@ -95,17 +97,32 @@ public class RibbonClientConfiguration {
@Autowired
private PropertiesFactory propertiesFactory;
@Autowired
private Environment environment;
@Bean
@ConditionalOnMissingBean
public IClientConfig ribbonClientConfig() {
DefaultClientConfigImpl config = new DefaultClientConfigImpl();
config.loadProperties(this.name);
config.set(CommonClientConfigKey.ConnectTimeout, DEFAULT_CONNECT_TIMEOUT);
config.set(CommonClientConfigKey.ReadTimeout, DEFAULT_READ_TIMEOUT);
config.set(CommonClientConfigKey.ConnectTimeout, getProperty(
CommonClientConfigKey.ConnectTimeout, DEFAULT_CONNECT_TIMEOUT));
config.set(CommonClientConfigKey.ReadTimeout,
getProperty(CommonClientConfigKey.ReadTimeout, DEFAULT_READ_TIMEOUT));
config.set(CommonClientConfigKey.GZipPayload, DEFAULT_GZIP_PAYLOAD);
return config;
}
private Integer getProperty(IClientConfigKey<Integer> connectTimeout,
int defaultConnectTimeout) {
return environment.getProperty("ribbon." + connectTimeout, Integer.class,
defaultConnectTimeout);
}
@Bean
@ConditionalOnMissingBean
public IRule ribbonRule(IClientConfig config) {

View File

@@ -53,6 +53,7 @@ import org.mockito.ArgumentMatcher;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.cloud.client.loadbalancer.LoadBalancedRetryFactory;
import org.springframework.cloud.commons.httpclient.HttpClientConfiguration;
import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration;
@@ -156,6 +157,21 @@ public class RibbonLoadBalancingHttpClientTests {
assertThat(result.isContentCompressionEnabled()).isTrue();
}
@Test
public void testTimeoutsFromProperties() throws Exception {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
HttpClientConfiguration.class, RibbonAutoConfiguration.class,
UseDefaults.class);
TestPropertyValues.of("ribbon.ConnectTimeout=1265", "ribbon.ReadTimeout=587")
.applyTo(context);
RequestConfig result = getBuiltRequestConfig(null, new SpringClientFactory(),
context);
assertThat(result.getConnectTimeout()).isEqualTo(1265);
assertThat(result.getSocketTimeout()).isEqualTo(587);
}
@Test
public void testCompressionDisabled() throws Exception {
IClientConfig configOverride = DefaultClientConfigImpl
@@ -947,10 +963,18 @@ public class RibbonLoadBalancingHttpClientTests {
private RequestConfig getBuiltRequestConfig(Class<?> defaultConfigurationClass,
IClientConfig configOverride, SpringClientFactory factory) throws Exception {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
HttpClientConfiguration.class, RibbonAutoConfiguration.class,
defaultConfigurationClass);
return getBuiltRequestConfig(configOverride, factory, context);
}
private RequestConfig getBuiltRequestConfig(IClientConfig configOverride,
SpringClientFactory factory, AnnotationConfigApplicationContext context)
throws Exception {
factory.setApplicationContext(context);
factory.setApplicationContext(
new AnnotationConfigApplicationContext(HttpClientConfiguration.class,
RibbonAutoConfiguration.class, defaultConfigurationClass));
String serviceName = "foo";
String host = serviceName;
int port = 80;