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 81585ecdff6..eeac88e70fa 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 cbab90217b6..56e07bae055 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.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.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 ServiceCenterClient(ServiceCenterAddressManager addressManager, SSLProperties sslProperties, RequestAuthHeaderProvider requestAuthHeaderProvider, String tenantName, - Map extraGlobalHeaders) { - HttpTransport httpTransport = HttpTransportFactory.createHttpTransport(sslProperties, requestAuthHeaderProvider); + Map extraGlobalHeaders, Environment environment) { + HttpTransport httpTransport = HttpTransportFactory.createHttpTransport(sslProperties, requestAuthHeaderProvider, + buildRequestConfig(environment)); httpTransport.addHeaders(extraGlobalHeaders); this.httpClient = new ServiceCenterRawClient.Builder() @@ -97,6 +106,17 @@ public ServiceCenterClient(ServiceCenterAddressManager addressManager, 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 85f041034cf..50ae96db158 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.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 void testRestTransport() throws Exception { 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 837f6e0c720..430ab158925 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.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 boolean getAutoDiscoveryEnabled() { 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 fb516580a32..492c5658f2f 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 void init(Configuration localConfiguration) { 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 void init(Configuration localConfiguration) { 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 96bff526b0a..51446608909 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.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 void init(Configuration localConfiguration) { 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 void init(Configuration localConfiguration) { 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 78035f0c3f0..1c599c4cca7 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 void startup(Environment environment) { // 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 clients = new HashMap<>(1); clients