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