This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch 2.8.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/2.8.x by this push:
     new 0cad4cc3f [#4842] servicecomb-client supports configurable 
connectTimeout , connectRequestTimeout, socketTimeout (#4852)
0cad4cc3f is described below

commit 0cad4cc3fcd5292726c6d85e0c2f7365abf2915a
Author: Alex <[email protected]>
AuthorDate: Mon Jun 30 11:57:27 2025 +0800

    [#4842] servicecomb-client supports configurable connectTimeout , 
connectRequestTimeout, socketTimeout (#4852)
---
 .../config/kie/client/model/ConfigConstants.java   |  6 ++++++
 .../service/center/client/ServiceCenterClient.java | 24 ++++++++++++++++++++--
 .../RegistryClientTest.java                        | 11 +++++++++-
 .../servicecomb/config/ConfigCenterConfig.java     | 19 +++++++++++++++++
 .../ConfigCenterConfigurationSourceImpl.java       | 11 ++++++++--
 .../config/kie/KieConfigurationSourceImpl.java     | 12 ++++++++++-
 .../serviceregistry/auth/RBACBootStrapService.java |  2 +-
 7 files changed, 78 insertions(+), 7 deletions(-)

diff --git 
a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/ConfigConstants.java
 
b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/ConfigConstants.java
index 81585ecdf..eeac88e70 100644
--- 
a/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/ConfigConstants.java
+++ 
b/clients/config-kie-client/src/main/java/org/apache/servicecomb/config/kie/client/model/ConfigConstants.java
@@ -37,4 +37,10 @@ public class ConfigConstants {
 
   public static final String KEY_POLLINGWAITSEC = "pollingWaitInSeconds";
 
+  public static final String CLIENT_CONNECT_TIMEOUT = 
"servicecomb.kie.client.timeout.connect";
+
+  public static final String CLIENT_REQUEST_TIMEOUT = 
"servicecomb.kie.client.timeout.request";
+
+  public static final String CLIENT_SOCKET_TIMEOUT = 
"servicecomb.kie.client.timeout.socket";
+
 }
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 cbab90217..56e07bae0 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.service.client.timeout.connect";
+
+  private static final String CLIENT_REQUEST_TIMEOUT = 
"servicecomb.service.client.timeout.request";
+
+  private static final String CLIENT_SOCKET_TIMEOUT = 
"servicecomb.service.client.timeout.socket";
+
   private final ServiceCenterRawClient httpClient;
 
   private EventBus eventBus;
@@ -86,8 +94,9 @@ 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()
@@ -97,6 +106,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/ConfigCenterConfig.java
 
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/ConfigCenterConfig.java
index 837f6e0c7..430ab1589 100644
--- 
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/ConfigCenterConfig.java
+++ 
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/ConfigCenterConfig.java
@@ -22,6 +22,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.commons.configuration.Configuration;
 import 
org.apache.servicecomb.config.collect.ConfigCenterDefaultDeploymentProvider;
 import org.apache.servicecomb.deployment.Deployment;
 import org.apache.servicecomb.foundation.vertx.VertxConst;
@@ -51,6 +52,12 @@ public final class ConfigCenterConfig {
 
   private static final int DEFAULT_FIRST_REFRESH_INTERVAL = 0;
 
+  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 ConfigCenterConfig() {
   }
 
@@ -135,4 +142,16 @@ public final class ConfigCenterConfig {
   public String getEnvironment() {
     return BootStrapProperties.readServiceEnvironment(finalConfig);
   }
+
+  public int getConnectTimeout(Configuration localConfiguration) {
+    return localConfiguration.getInt(CLIENT_CONNECT_TIMEOUT, 5000);
+  }
+
+  public int getConnectionRequestTimeout(Configuration configuration) {
+    return configuration.getInt(CLIENT_REQUEST_TIMEOUT, 5000);
+  }
+
+  public int getSocketTimeout(Configuration configuration) {
+    return configuration.getInt(CLIENT_SOCKET_TIMEOUT, 5000);
+  }
 }
diff --git 
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/ConfigCenterConfigurationSourceImpl.java
 
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/ConfigCenterConfigurationSourceImpl.java
index fb516580a..492c5658f 100644
--- 
a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/ConfigCenterConfigurationSourceImpl.java
+++ 
b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/ConfigCenterConfigurationSourceImpl.java
@@ -91,8 +91,7 @@ public class ConfigCenterConfigurationSourceImpl implements 
ConfigCenterConfigur
     ConfigCenterAddressManager configCenterAddressManager = 
configCenterAddressManager();
 
     HttpTransport httpTransport = 
createHttpTransport(configCenterAddressManager,
-        HttpTransportFactory.defaultRequestConfig().build(),
-        localConfiguration);
+        buildRequestConfig(localConfiguration), localConfiguration);
     ConfigCenterClient configCenterClient = new 
ConfigCenterClient(configCenterAddressManager, httpTransport);
     EventManager.register(this);
 
@@ -106,6 +105,14 @@ public class ConfigCenterConfigurationSourceImpl 
implements ConfigCenterConfigur
     configCenterManager.startConfigCenterManager();
   }
 
+  private RequestConfig buildRequestConfig(Configuration configuration) {
+    RequestConfig.Builder builder = 
HttpTransportFactory.defaultRequestConfig();
+    
builder.setConnectTimeout(ConfigCenterConfig.INSTANCE.getConnectTimeout(configuration));
+    
builder.setConnectionRequestTimeout(ConfigCenterConfig.INSTANCE.getConnectionRequestTimeout(configuration));
+    
builder.setSocketTimeout(ConfigCenterConfig.INSTANCE.getSocketTimeout(configuration));
+    return builder.build();
+  }
+
   private QueryConfigurationsRequest firstPull(ConfigCenterClient 
configCenterClient,
       ConfigCenterAddressManager configCenterAddressManager) {
     QueryConfigurationsRequest queryConfigurationsRequest = 
createQueryConfigurationsRequest();
diff --git 
a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java
 
b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java
index 96bff526b..514466089 100644
--- 
a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java
+++ 
b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/KieConfigurationSourceImpl.java
@@ -31,12 +31,14 @@ 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.common.ConfigConverter;
 import org.apache.servicecomb.config.common.ConfigurationChangedEvent;
 import org.apache.servicecomb.config.kie.client.KieClient;
 import org.apache.servicecomb.config.kie.client.KieConfigManager;
+import org.apache.servicecomb.config.kie.client.model.ConfigConstants;
 import org.apache.servicecomb.config.kie.client.model.KieAddressManager;
 import org.apache.servicecomb.config.kie.client.model.KieConfiguration;
 import org.apache.servicecomb.config.spi.ConfigCenterConfigurationSource;
@@ -85,7 +87,7 @@ public class KieConfigurationSourceImpl implements 
ConfigCenterConfigurationSour
     configConverter = new ConfigConverter(KieConfig.INSTANCE.getFileSources());
     KieAddressManager kieAddressManager = configKieAddressManager();
 
-    RequestConfig.Builder requestBuilder = 
HttpTransportFactory.defaultRequestConfig();
+    RequestConfig.Builder requestBuilder = 
buildRequestConfigBuilder(localConfiguration);
     if (KieConfig.INSTANCE.enableLongPolling()
         && KieConfig.INSTANCE.getPollingWaitTime() >= 0) {
       
requestBuilder.setConnectionRequestTimeout(KieConfig.INSTANCE.getPollingWaitTime()
 * 2 * 1000);
@@ -103,6 +105,14 @@ public class KieConfigurationSourceImpl implements 
ConfigCenterConfigurationSour
     
updateConfiguration(WatchedUpdateResult.createIncremental(configConverter.getCurrentData(),
 null, null));
   }
 
+  private Builder buildRequestConfigBuilder(Configuration configuration) {
+    RequestConfig.Builder builder = 
HttpTransportFactory.defaultRequestConfig();
+    
builder.setConnectTimeout(configuration.getInt(ConfigConstants.CLIENT_CONNECT_TIMEOUT,
 5000));
+    
builder.setConnectionRequestTimeout(configuration.getInt(ConfigConstants.CLIENT_REQUEST_TIMEOUT,
 5000));
+    
builder.setSocketTimeout(configuration.getInt(ConfigConstants.CLIENT_SOCKET_TIMEOUT,
 5000));
+    return builder;
+  }
+
   @Subscribe
   public void onConfigurationChangedEvent(ConfigurationChangedEvent event) {
     updateConfiguration(
diff --git 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/auth/RBACBootStrapService.java
 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/auth/RBACBootStrapService.java
index 78035f0c3..1c599c4cc 100644
--- 
a/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/auth/RBACBootStrapService.java
+++ 
b/service-registry/registry-service-center/src/main/java/org/apache/servicecomb/serviceregistry/auth/RBACBootStrapService.java
@@ -68,7 +68,7 @@ public class RBACBootStrapService implements BootStrapService 
{
     // header: x-domain-name and url: /v1/{project}/ are all token from 
getTenantName。
     ServiceCenterClient serviceCenterClient = new ServiceCenterClient(
         addressManager, sslProperties, new DefaultRequestAuthHeaderProvider(), 
getTenantName(environment),
-        new HashMap<>(0)
+        new HashMap<>(0), environment
     );
     Map<String, ServiceCenterClient> clients = new HashMap<>(1);
     clients

Reply via email to