Skip to content

Commit 0cad4cc

Browse files
authored
[#4842] servicecomb-client supports configurable connectTimeout , connectRequestTimeout, socketTimeout (#4852)
1 parent 1b4624f commit 0cad4cc

File tree

7 files changed

+78
-7
lines changed

7 files changed

+78
-7
lines changed

clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/ConfigConstants.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,10 @@ public class ConfigConstants {
3737

3838
public static final String KEY_POLLINGWAITSEC = "pollingWaitInSeconds";
3939

40+
public static final String CLIENT_CONNECT_TIMEOUT = "servicecomb.kie.client.timeout.connect";
41+
42+
public static final String CLIENT_REQUEST_TIMEOUT = "servicecomb.kie.client.timeout.request";
43+
44+
public static final String CLIENT_SOCKET_TIMEOUT = "servicecomb.kie.client.timeout.socket";
45+
4046
}

clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.Map;
2626

2727
import org.apache.http.HttpStatus;
28+
import org.apache.http.client.config.RequestConfig;
2829
import org.apache.http.client.utils.URIBuilder;
2930
import org.apache.servicecomb.http.client.auth.RequestAuthHeaderProvider;
3031
import org.apache.servicecomb.http.client.common.HttpConfiguration.SSLProperties;
@@ -59,13 +60,20 @@
5960
import org.apache.servicecomb.service.center.client.model.UpdatePropertiesRequest;
6061
import org.slf4j.Logger;
6162
import org.slf4j.LoggerFactory;
63+
import org.springframework.core.env.Environment;
6264

6365
import com.google.common.eventbus.EventBus;
6466

6567
public class ServiceCenterClient implements ServiceCenterOperation {
6668

6769
private static final Logger LOGGER = LoggerFactory.getLogger(ServiceCenterClient.class);
6870

71+
private static final String CLIENT_CONNECT_TIMEOUT = "servicecomb.service.client.timeout.connect";
72+
73+
private static final String CLIENT_REQUEST_TIMEOUT = "servicecomb.service.client.timeout.request";
74+
75+
private static final String CLIENT_SOCKET_TIMEOUT = "servicecomb.service.client.timeout.socket";
76+
6977
private final ServiceCenterRawClient httpClient;
7078

7179
private EventBus eventBus;
@@ -86,8 +94,9 @@ public ServiceCenterClient(ServiceCenterAddressManager addressManager,
8694
SSLProperties sslProperties,
8795
RequestAuthHeaderProvider requestAuthHeaderProvider,
8896
String tenantName,
89-
Map<String, String> extraGlobalHeaders) {
90-
HttpTransport httpTransport = HttpTransportFactory.createHttpTransport(sslProperties, requestAuthHeaderProvider);
97+
Map<String, String> extraGlobalHeaders, Environment environment) {
98+
HttpTransport httpTransport = HttpTransportFactory.createHttpTransport(sslProperties, requestAuthHeaderProvider,
99+
buildRequestConfig(environment));
91100
httpTransport.addHeaders(extraGlobalHeaders);
92101

93102
this.httpClient = new ServiceCenterRawClient.Builder()
@@ -97,6 +106,17 @@ public ServiceCenterClient(ServiceCenterAddressManager addressManager,
97106
this.addressManager = addressManager;
98107
}
99108

109+
private RequestConfig buildRequestConfig(Environment environment) {
110+
RequestConfig.Builder builder = HttpTransportFactory.defaultRequestConfig();
111+
if (environment == null) {
112+
return builder.build();
113+
}
114+
builder.setConnectTimeout(environment.getProperty(CLIENT_CONNECT_TIMEOUT, int.class, 5000));
115+
builder.setConnectionRequestTimeout(environment.getProperty(CLIENT_REQUEST_TIMEOUT, int.class, 5000));
116+
builder.setSocketTimeout(environment.getProperty(CLIENT_SOCKET_TIMEOUT, int.class, 5000));
117+
return builder.build();
118+
}
119+
100120
@Override
101121
public MicroserviceInstancesResponse getServiceCenterInstances() {
102122
try {

demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/RegistryClientTest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
import org.apache.servicecomb.service.center.client.model.MicroserviceInstance;
4343
import org.apache.servicecomb.service.center.client.model.SchemaInfo;
4444
import org.apache.servicecomb.service.center.client.model.ServiceCenterConfiguration;
45+
import org.springframework.beans.factory.annotation.Autowired;
46+
import org.springframework.core.env.Environment;
4547
import org.springframework.stereotype.Component;
4648

4749
import com.google.common.base.Charsets;
@@ -58,14 +60,21 @@ public class RegistryClientTest implements CategorizedTestCase {
5860
// auto test only tests 'hasRegistered=false', can run this client many times to test 'hasRegistered=true'
5961
private boolean hasRegistered = true;
6062

63+
private final Environment environment;
64+
65+
@Autowired
66+
public RegistryClientTest(Environment environment) {
67+
this.environment = environment;
68+
}
69+
6170
@Override
6271
public void testRestTransport() throws Exception {
6372
ServiceCenterAddressManager addressManager = new ServiceCenterAddressManager("default", Arrays.asList("http://127.0.0.1:30100"),
6473
new EventBus());
6574
SSLProperties sslProperties = new SSLProperties();
6675
sslProperties.setEnabled(false);
6776
ServiceCenterClient serviceCenterClient = new ServiceCenterClient(addressManager, sslProperties,
68-
new DefaultRequestAuthHeaderProvider(), "default", null);
77+
new DefaultRequestAuthHeaderProvider(), "default", null, environment);
6978
EventBus eventBus = new SimpleEventBus();
7079
ServiceCenterConfiguration serviceCenterConfiguration = new ServiceCenterConfiguration();
7180
ServiceCenterRegistration serviceCenterRegistration = new ServiceCenterRegistration(serviceCenterClient,

dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/ConfigCenterConfig.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.Collections;
2323
import java.util.List;
2424

25+
import org.apache.commons.configuration.Configuration;
2526
import org.apache.servicecomb.config.collect.ConfigCenterDefaultDeploymentProvider;
2627
import org.apache.servicecomb.deployment.Deployment;
2728
import org.apache.servicecomb.foundation.vertx.VertxConst;
@@ -51,6 +52,12 @@ public final class ConfigCenterConfig {
5152

5253
private static final int DEFAULT_FIRST_REFRESH_INTERVAL = 0;
5354

55+
private static final String CLIENT_CONNECT_TIMEOUT = "servicecomb.config.client.timeout.connect";
56+
57+
private static final String CLIENT_REQUEST_TIMEOUT = "servicecomb.config.client.timeout.request";
58+
59+
private static final String CLIENT_SOCKET_TIMEOUT = "servicecomb.config.client.timeout.socket";
60+
5461
private ConfigCenterConfig() {
5562
}
5663

@@ -135,4 +142,16 @@ public boolean getAutoDiscoveryEnabled() {
135142
public String getEnvironment() {
136143
return BootStrapProperties.readServiceEnvironment(finalConfig);
137144
}
145+
146+
public int getConnectTimeout(Configuration localConfiguration) {
147+
return localConfiguration.getInt(CLIENT_CONNECT_TIMEOUT, 5000);
148+
}
149+
150+
public int getConnectionRequestTimeout(Configuration configuration) {
151+
return configuration.getInt(CLIENT_REQUEST_TIMEOUT, 5000);
152+
}
153+
154+
public int getSocketTimeout(Configuration configuration) {
155+
return configuration.getInt(CLIENT_SOCKET_TIMEOUT, 5000);
156+
}
138157
}

dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/ConfigCenterConfigurationSourceImpl.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,7 @@ public void init(Configuration localConfiguration) {
9191
ConfigCenterAddressManager configCenterAddressManager = configCenterAddressManager();
9292

9393
HttpTransport httpTransport = createHttpTransport(configCenterAddressManager,
94-
HttpTransportFactory.defaultRequestConfig().build(),
95-
localConfiguration);
94+
buildRequestConfig(localConfiguration), localConfiguration);
9695
ConfigCenterClient configCenterClient = new ConfigCenterClient(configCenterAddressManager, httpTransport);
9796
EventManager.register(this);
9897

@@ -106,6 +105,14 @@ public void init(Configuration localConfiguration) {
106105
configCenterManager.startConfigCenterManager();
107106
}
108107

108+
private RequestConfig buildRequestConfig(Configuration configuration) {
109+
RequestConfig.Builder builder = HttpTransportFactory.defaultRequestConfig();
110+
builder.setConnectTimeout(ConfigCenterConfig.INSTANCE.getConnectTimeout(configuration));
111+
builder.setConnectionRequestTimeout(ConfigCenterConfig.INSTANCE.getConnectionRequestTimeout(configuration));
112+
builder.setSocketTimeout(ConfigCenterConfig.INSTANCE.getSocketTimeout(configuration));
113+
return builder.build();
114+
}
115+
109116
private QueryConfigurationsRequest firstPull(ConfigCenterClient configCenterClient,
110117
ConfigCenterAddressManager configCenterAddressManager) {
111118
QueryConfigurationsRequest queryConfigurationsRequest = createQueryConfigurationsRequest();

dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@
3131
import org.apache.http.auth.UsernamePasswordCredentials;
3232
import org.apache.http.client.CredentialsProvider;
3333
import org.apache.http.client.config.RequestConfig;
34+
import org.apache.http.client.config.RequestConfig.Builder;
3435
import org.apache.http.impl.client.BasicCredentialsProvider;
3536
import org.apache.http.impl.client.HttpClientBuilder;
3637
import org.apache.servicecomb.config.common.ConfigConverter;
3738
import org.apache.servicecomb.config.common.ConfigurationChangedEvent;
3839
import org.apache.servicecomb.config.kie.client.KieClient;
3940
import org.apache.servicecomb.config.kie.client.KieConfigManager;
41+
import org.apache.servicecomb.config.kie.client.model.ConfigConstants;
4042
import org.apache.servicecomb.config.kie.client.model.KieAddressManager;
4143
import org.apache.servicecomb.config.kie.client.model.KieConfiguration;
4244
import org.apache.servicecomb.config.spi.ConfigCenterConfigurationSource;
@@ -85,7 +87,7 @@ public void init(Configuration localConfiguration) {
8587
configConverter = new ConfigConverter(KieConfig.INSTANCE.getFileSources());
8688
KieAddressManager kieAddressManager = configKieAddressManager();
8789

88-
RequestConfig.Builder requestBuilder = HttpTransportFactory.defaultRequestConfig();
90+
RequestConfig.Builder requestBuilder = buildRequestConfigBuilder(localConfiguration);
8991
if (KieConfig.INSTANCE.enableLongPolling()
9092
&& KieConfig.INSTANCE.getPollingWaitTime() >= 0) {
9193
requestBuilder.setConnectionRequestTimeout(KieConfig.INSTANCE.getPollingWaitTime() * 2 * 1000);
@@ -103,6 +105,14 @@ public void init(Configuration localConfiguration) {
103105
updateConfiguration(WatchedUpdateResult.createIncremental(configConverter.getCurrentData(), null, null));
104106
}
105107

108+
private Builder buildRequestConfigBuilder(Configuration configuration) {
109+
RequestConfig.Builder builder = HttpTransportFactory.defaultRequestConfig();
110+
builder.setConnectTimeout(configuration.getInt(ConfigConstants.CLIENT_CONNECT_TIMEOUT, 5000));
111+
builder.setConnectionRequestTimeout(configuration.getInt(ConfigConstants.CLIENT_REQUEST_TIMEOUT, 5000));
112+
builder.setSocketTimeout(configuration.getInt(ConfigConstants.CLIENT_SOCKET_TIMEOUT, 5000));
113+
return builder;
114+
}
115+
106116
@Subscribe
107117
public void onConfigurationChangedEvent(ConfigurationChangedEvent event) {
108118
updateConfiguration(

service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/auth/RBACBootStrapService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public void startup(Environment environment) {
6868
// header: x-domain-name and url: /v1/{project}/ are all token from getTenantName。
6969
ServiceCenterClient serviceCenterClient = new ServiceCenterClient(
7070
addressManager, sslProperties, new DefaultRequestAuthHeaderProvider(), getTenantName(environment),
71-
new HashMap<>(0)
71+
new HashMap<>(0), environment
7272
);
7373
Map<String, ServiceCenterClient> clients = new HashMap<>(1);
7474
clients

0 commit comments

Comments
 (0)