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());

Reply via email to