This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new 3d46b2413 [#4842] servicecomb-client supports configurable
connectTimeout , connectRequestTimeout, socketTimeout (#4853)
3d46b2413 is described below
commit 3d46b2413a7512b3dea74bae777f2f635af2aab0
Author: Alex <[email protected]>
AuthorDate: Fri Jun 27 16:55:08 2025 +0800
[#4842] servicecomb-client supports configurable connectTimeout ,
connectRequestTimeout, socketTimeout (#4853)
---
.../service/center/client/ServiceCenterClient.java | 25 ++++++++++++++++++++--
.../RegistryClientTest.java | 11 +++++++++-
.../servicecomb/config/cc/ConfigCenterConfig.java | 18 ++++++++++++++++
.../cc/ConfigCenterDynamicPropertiesSource.java | 11 ++++++++--
.../apache/servicecomb/config/kie/KieConfig.java | 18 ++++++++++++++++
.../config/kie/KieDynamicPropertiesSource.java | 11 +++++++++-
6 files changed, 88 insertions(+), 6 deletions(-)
diff --git
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java
index 1e6f41561..407fb28ac 100755
---
a/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java
+++
b/clients/service-center-client/src/main/java/org/apache/servicecomb/service/center/client/ServiceCenterClient.java
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.Map;
import org.apache.http.HttpStatus;
+import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.utils.URIBuilder;
import org.apache.servicecomb.http.client.auth.RequestAuthHeaderProvider;
import
org.apache.servicecomb.http.client.common.HttpConfiguration.SSLProperties;
@@ -59,6 +60,7 @@ import
org.apache.servicecomb.service.center.client.model.SchemaInfo;
import
org.apache.servicecomb.service.center.client.model.UpdatePropertiesRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.core.env.Environment;
import com.google.common.eventbus.EventBus;
@@ -66,6 +68,12 @@ public class ServiceCenterClient implements
ServiceCenterOperation {
private static final Logger LOGGER =
LoggerFactory.getLogger(ServiceCenterClient.class);
+ private static final String CLIENT_CONNECT_TIMEOUT =
"servicecomb.registry.sc.client.timeout.connect";
+
+ private static final String CLIENT_REQUEST_TIMEOUT =
"servicecomb.registry.sc.client.timeout.request";
+
+ private static final String CLIENT_SOCKET_TIMEOUT =
"servicecomb.registry.sc.client.timeout.socket";
+
private final ServiceCenterRawClient httpClient;
private EventBus eventBus;
@@ -87,8 +95,10 @@ public class ServiceCenterClient implements
ServiceCenterOperation {
SSLProperties sslProperties,
RequestAuthHeaderProvider requestAuthHeaderProvider,
String tenantName,
- Map<String, String> extraGlobalHeaders) {
- HttpTransport httpTransport =
HttpTransportFactory.createHttpTransport(sslProperties,
requestAuthHeaderProvider);
+ Map<String, String> extraGlobalHeaders,
+ Environment environment) {
+ HttpTransport httpTransport =
HttpTransportFactory.createHttpTransport(sslProperties,
requestAuthHeaderProvider,
+ buildRequestConfig(environment));
httpTransport.addHeaders(extraGlobalHeaders);
this.httpClient = new ServiceCenterRawClient.Builder()
@@ -98,6 +108,17 @@ public class ServiceCenterClient implements
ServiceCenterOperation {
this.addressManager = addressManager;
}
+ private RequestConfig buildRequestConfig(Environment environment) {
+ RequestConfig.Builder builder =
HttpTransportFactory.defaultRequestConfig();
+ if (environment == null) {
+ return builder.build();
+ }
+ builder.setConnectTimeout(environment.getProperty(CLIENT_CONNECT_TIMEOUT,
int.class, 5000));
+
builder.setConnectionRequestTimeout(environment.getProperty(CLIENT_REQUEST_TIMEOUT,
int.class, 5000));
+ builder.setSocketTimeout(environment.getProperty(CLIENT_SOCKET_TIMEOUT,
int.class, 5000));
+ return builder.build();
+ }
+
@Override
public MicroserviceInstancesResponse getServiceCenterInstances() {
try {
diff --git
a/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/RegistryClientTest.java
b/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/RegistryClientTest.java
index 85f041034..50ae96db1 100644
---
a/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/RegistryClientTest.java
+++
b/demo/demo-multi-service-center/demo-multi-service-center-client/src/main/java/org/apache/servicecomb/demo/multiServiceCenterClient/RegistryClientTest.java
@@ -42,6 +42,8 @@ import
org.apache.servicecomb.service.center.client.model.Microservice;
import org.apache.servicecomb.service.center.client.model.MicroserviceInstance;
import org.apache.servicecomb.service.center.client.model.SchemaInfo;
import
org.apache.servicecomb.service.center.client.model.ServiceCenterConfiguration;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import com.google.common.base.Charsets;
@@ -58,6 +60,13 @@ public class RegistryClientTest implements
CategorizedTestCase {
// auto test only tests 'hasRegistered=false', can run this client many
times to test 'hasRegistered=true'
private boolean hasRegistered = true;
+ private final Environment environment;
+
+ @Autowired
+ public RegistryClientTest(Environment environment) {
+ this.environment = environment;
+ }
+
@Override
public void testRestTransport() throws Exception {
ServiceCenterAddressManager addressManager = new
ServiceCenterAddressManager("default", Arrays.asList("http://127.0.0.1:30100"),
@@ -65,7 +74,7 @@ public class RegistryClientTest implements
CategorizedTestCase {
SSLProperties sslProperties = new SSLProperties();
sslProperties.setEnabled(false);
ServiceCenterClient serviceCenterClient = new
ServiceCenterClient(addressManager, sslProperties,
- new DefaultRequestAuthHeaderProvider(), "default", null);
+ new DefaultRequestAuthHeaderProvider(), "default", null, environment);
EventBus eventBus = new SimpleEventBus();
ServiceCenterConfiguration serviceCenterConfiguration = new
ServiceCenterConfiguration();
ServiceCenterRegistration serviceCenterRegistration = new
ServiceCenterRegistration(serviceCenterClient,
diff --git
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/ConfigCenterConfig.java
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/ConfigCenterConfig.java
index eaa047e98..c1cf7c1b6 100644
---
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/ConfigCenterConfig.java
+++
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/ConfigCenterConfig.java
@@ -39,6 +39,12 @@ public final class ConfigCenterConfig {
private static final int DEFAULT_REFRESH_INTERVAL = 15000;
+ private static final String CLIENT_CONNECT_TIMEOUT =
"servicecomb.config.client.timeout.connect";
+
+ private static final String CLIENT_REQUEST_TIMEOUT =
"servicecomb.config.client.timeout.request";
+
+ private static final String CLIENT_SOCKET_TIMEOUT =
"servicecomb.config.client.timeout.socket";
+
private final Environment environment;
public ConfigCenterConfig(Environment environment) {
@@ -86,4 +92,16 @@ public final class ConfigCenterConfig {
public List<String> getServerUri() {
return ConfigUtil.parseArrayValue(environment.getProperty(ADDRESS, ""));
}
+
+ public int getConnectTimeout() {
+ return environment.getProperty(CLIENT_CONNECT_TIMEOUT, int.class, 5000);
+ }
+
+ public int getConnectionRequestTimeout() {
+ return environment.getProperty(CLIENT_REQUEST_TIMEOUT, int.class, 5000);
+ }
+
+ public int getSocketTimeout() {
+ return environment.getProperty(CLIENT_SOCKET_TIMEOUT, int.class, 5000);
+ }
}
diff --git
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/ConfigCenterDynamicPropertiesSource.java
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/ConfigCenterDynamicPropertiesSource.java
index 431963da6..d1130317e 100644
---
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/ConfigCenterDynamicPropertiesSource.java
+++
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/cc/ConfigCenterDynamicPropertiesSource.java
@@ -72,8 +72,7 @@ public class ConfigCenterDynamicPropertiesSource implements
DynamicPropertiesSou
ConfigCenterAddressManager configCenterAddressManager =
configCenterAddressManager(configCenterConfig);
HttpTransport httpTransport =
createHttpTransport(configCenterAddressManager,
- HttpTransportFactory.defaultRequestConfig().build(),
- environment, configCenterConfig);
+ buildRequestConfig(configCenterConfig), environment,
configCenterConfig);
ConfigCenterClient configCenterClient = new
ConfigCenterClient(configCenterAddressManager, httpTransport);
EventManager.register(this);
@@ -90,6 +89,14 @@ public class ConfigCenterDynamicPropertiesSource implements
DynamicPropertiesSou
data.putAll(configConverter.getCurrentData());
}
+ private RequestConfig buildRequestConfig(ConfigCenterConfig config) {
+ RequestConfig.Builder builder =
HttpTransportFactory.defaultRequestConfig();
+ builder.setConnectTimeout(config.getConnectTimeout());
+ builder.setConnectionRequestTimeout(config.getConnectionRequestTimeout());
+ builder.setSocketTimeout(config.getSocketTimeout());
+ return builder.build();
+ }
+
private QueryConfigurationsRequest firstPull(ConfigCenterConfig
configCenterConfig,
ConfigCenterClient configCenterClient, Environment environment,
ConfigCenterAddressManager configCenterAddressManager) {
diff --git
a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfig.java
b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfig.java
index 564b5c8ad..79e40786f 100644
---
a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfig.java
+++
b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfig.java
@@ -66,6 +66,12 @@ public class KieConfig {
private static final String CUSTOM_LABEL_VALUE_DEFAULT = "";
+ private static final String CLIENT_CONNECT_TIMEOUT =
"servicecomb.kie.client.timeout.connect";
+
+ private static final String CLIENT_REQUEST_TIMEOUT =
"servicecomb.kie.client.timeout.request";
+
+ private static final String CLIENT_SOCKET_TIMEOUT =
"servicecomb.kie.client.timeout.socket";
+
private final Environment environment;
public KieConfig(Environment environment) {
@@ -148,4 +154,16 @@ public class KieConfig {
public String getProxyPasswd() {
return environment.getProperty(VertxConst.PROXY_PASSWD);
}
+
+ public int getConnectTimeout() {
+ return environment.getProperty(CLIENT_CONNECT_TIMEOUT, int.class, 5000);
+ }
+
+ public int getConnectionRequestTimeout() {
+ return environment.getProperty(CLIENT_REQUEST_TIMEOUT, int.class, 5000);
+ }
+
+ public int getSocketTimeout() {
+ return environment.getProperty(CLIENT_SOCKET_TIMEOUT, int.class, 5000);
+ }
}
diff --git
a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieDynamicPropertiesSource.java
b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieDynamicPropertiesSource.java
index 716579692..e9819f674 100644
---
a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieDynamicPropertiesSource.java
+++
b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieDynamicPropertiesSource.java
@@ -26,6 +26,7 @@ import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.config.RequestConfig.Builder;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.servicecomb.config.BootStrapProperties;
@@ -72,7 +73,7 @@ public class KieDynamicPropertiesSource implements
DynamicPropertiesSource {
configConverter = new ConfigConverter(kieConfig.getFileSources());
KieAddressManager kieAddressManager = configKieAddressManager(kieConfig);
- RequestConfig.Builder requestBuilder =
HttpTransportFactory.defaultRequestConfig();
+ RequestConfig.Builder requestBuilder =
buildRequestConfigBuilder(kieConfig);
if (kieConfig.enableLongPolling()
&& kieConfig.getPollingWaitTime() >= 0) {
requestBuilder.setConnectionRequestTimeout(kieConfig.getPollingWaitTime() * 2 *
1000);
@@ -90,6 +91,14 @@ public class KieDynamicPropertiesSource implements
DynamicPropertiesSource {
data.putAll(configConverter.getCurrentData());
}
+ private Builder buildRequestConfigBuilder(KieConfig kieConfig) {
+ Builder builder = HttpTransportFactory.defaultRequestConfig();
+ builder.setConnectTimeout(kieConfig.getConnectTimeout());
+
builder.setConnectionRequestTimeout(kieConfig.getConnectionRequestTimeout());
+ builder.setSocketTimeout(kieConfig.getSocketTimeout());
+ return builder;
+ }
+
@Subscribe
public void onConfigurationChangedEvent(KieConfigurationChangedEvent event) {
LOGGER.info("Dynamic configuration changed: {}", event.getChanged());