You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2021/06/17 07:54:27 UTC

[servicecomb-java-chassis] branch master updated: [SCB-2279]config service client should support proxy (#2419)

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 3a23efb  [SCB-2279]config service client should support proxy (#2419)
3a23efb is described below

commit 3a23efb4813111cdc3b19e0c5abf302a13b3b5c0
Author: liubao68 <bi...@qq.com>
AuthorDate: Thu Jun 17 15:54:20 2021 +0800

    [SCB-2279]config service client should support proxy (#2419)
---
 .../http/client/common/HttpTransportFactory.java   | 27 +++++++---
 .../apache/servicecomb/deployment/Deployment.java  |  5 --
 .../servicecomb/config/ConfigCenterConfig.java     | 57 ----------------------
 .../ConfigCenterConfigurationSourceImpl.java       | 40 ++++++++++++---
 .../apache/servicecomb/config/kie/KieConfig.java   | 24 ---------
 .../config/kie/KieConfigurationSourceImpl.java     | 32 ++++++++++--
 6 files changed, 81 insertions(+), 104 deletions(-)

diff --git a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpTransportFactory.java b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpTransportFactory.java
index d9188ce..b117932 100644
--- a/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpTransportFactory.java
+++ b/clients/http-client-common/src/main/java/org/apache/servicecomb/http/client/common/HttpTransportFactory.java
@@ -28,6 +28,7 @@ import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.apache.servicecomb.foundation.ssl.SSLManager;
 import org.apache.servicecomb.http.client.auth.RequestAuthHeaderProvider;
+import org.apache.servicecomb.http.client.common.HttpConfiguration.SSLProperties;
 
 public class HttpTransportFactory {
   // All parameters set to 5 seconds now.
@@ -45,7 +46,25 @@ public class HttpTransportFactory {
   }
 
   public static HttpTransport createHttpTransport(HttpConfiguration.SSLProperties sslProperties,
+      RequestAuthHeaderProvider requestAuthHeaderProvider, HttpClientBuilder httpClientBuilder) {
+    PoolingHttpClientConnectionManager connectionManager = getPoolingHttpClientConnectionManager(sslProperties);
+    httpClientBuilder.setConnectionManager(connectionManager).disableCookieManagement();
+    return new HttpTransportImpl(httpClientBuilder.build(), requestAuthHeaderProvider);
+  }
+
+  public static HttpTransport createHttpTransport(HttpConfiguration.SSLProperties sslProperties,
       RequestAuthHeaderProvider requestAuthHeaderProvider, RequestConfig config) {
+    PoolingHttpClientConnectionManager connectionManager = getPoolingHttpClientConnectionManager(sslProperties);
+
+    HttpClientBuilder httpClientBuilder = HttpClientBuilder.create().
+        setDefaultRequestConfig(config).
+        setConnectionManager(connectionManager).
+        disableCookieManagement();
+
+    return new HttpTransportImpl(httpClientBuilder.build(), requestAuthHeaderProvider);
+  }
+
+  private static PoolingHttpClientConnectionManager getPoolingHttpClientConnectionManager(SSLProperties sslProperties) {
     //register http/https socket factory
     RegistryBuilder<ConnectionSocketFactory> builder = RegistryBuilder.<ConnectionSocketFactory>create();
     builder.register("http", PlainConnectionSocketFactory.INSTANCE);
@@ -62,13 +81,7 @@ public class HttpTransportFactory {
         connectionSocketFactoryRegistry);
     connectionManager.setMaxTotal(MAX_TOTAL);
     connectionManager.setDefaultMaxPerRoute(DEFAULT_MAX_PER_ROUTE);
-
-    HttpClientBuilder httpClientBuilder = HttpClientBuilder.create().
-        setDefaultRequestConfig(config).
-        setConnectionManager(connectionManager).
-        disableCookieManagement();
-
-    return new HttpTransportImpl(httpClientBuilder.build(), requestAuthHeaderProvider);
+    return connectionManager;
   }
 
   public static HttpTransport createHttpTransport(HttpConfiguration.SSLProperties sslProperties,
diff --git a/deployment/src/main/java/org/apache/servicecomb/deployment/Deployment.java b/deployment/src/main/java/org/apache/servicecomb/deployment/Deployment.java
index dec140f..f26980e 100644
--- a/deployment/src/main/java/org/apache/servicecomb/deployment/Deployment.java
+++ b/deployment/src/main/java/org/apache/servicecomb/deployment/Deployment.java
@@ -17,14 +17,10 @@
 
 package org.apache.servicecomb.deployment;
 
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
 
-import com.google.common.annotations.VisibleForTesting;
-
 public class Deployment {
   private static List<DeploymentProvider> providerList = SPIServiceUtils.getSortedService(DeploymentProvider.class);
 
@@ -36,5 +32,4 @@ public class Deployment {
     }
     return null;
   }
-
 }
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 3c0a582..5a4030b 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
@@ -36,38 +36,16 @@ public final class ConfigCenterConfig {
 
   private static final String AUTO_DISCOVERY_ENABLED = "servicecomb.service.registry.autodiscovery";
 
-  private static final String REFRESH_MODE = "servicecomb.config.client.refreshMode";
-
-  private static final String REFRESH_PORT = "servicecomb.config.client.refreshPort";
-
-  private static final String TENANT_NAME = "servicecomb.config.client.tenantName";
-
   private static final String DOMAIN_NAME = "servicecomb.config.client.domainName";
 
-  private static final String TOKEN_NAME = "servicecomb.config.client.token";
-
-  private static final String URI_API_VERSION = "servicecomb.config.client.api.version";
-
   private static final String REFRESH_INTERVAL = "servicecomb.config.client.refresh_interval";
 
   private static final String FIRST_REFRESH_INTERVAL = "servicecomb.config.client.first_refresh_interval";
 
   private static final String FIRST_PULL_REQUIRED = "servicecomb.config.client.firstPullRequired";
 
-  public static final String CONNECTION_TIME_OUT = "servicecomb.config.client.timeout.connection";
-
-  public static final String EVENT_LOOP_SIZE = "servicecomb.config.client.eventLoopSize";
-
   public static final String FILE_SOURCE = "servicecomb.config.client.fileSource";
 
-  public static final String VERTICAL_INSTANCE_COUNT = "servicecomb.config.client.verticalInstanceCount";
-
-  public static final String IDLE_TIMEOUT_IN_SECONDES = "servicecomb.config.client.idleTimeoutInSeconds";
-
-  private static final int DEFAULT_REFRESH_MODE = 0;
-
-  private static final int DEFAULT_REFRESH_PORT = 30104;
-
   private static final int DEFAULT_REFRESH_INTERVAL = 30000;
 
   private static final int DEFAULT_FIRST_REFRESH_INTERVAL = 0;
@@ -83,30 +61,11 @@ public final class ConfigCenterConfig {
     return finalConfig;
   }
 
-  public int getRefreshMode() {
-    return finalConfig.getInt(REFRESH_MODE, DEFAULT_REFRESH_MODE);
-  }
-
-  public int getRefreshPort() {
-    return finalConfig.getInt(REFRESH_PORT, DEFAULT_REFRESH_PORT);
-  }
-
-  public String getTenantName() {
-    return finalConfig.getString(TENANT_NAME, "default");
-  }
 
   public String getDomainName() {
     return finalConfig.getString(DOMAIN_NAME, "default");
   }
 
-  public String getToken() {
-    return finalConfig.getString(TOKEN_NAME, null);
-  }
-
-  public String getApiVersion() {
-    return finalConfig.getString(URI_API_VERSION, "v3");
-  }
-
   public boolean firstPullRequired() {
     return finalConfig.getBoolean(FIRST_PULL_REQUIRED, false);
   }
@@ -174,22 +133,6 @@ public final class ConfigCenterConfig {
     return finalConfig.getBoolean(AUTO_DISCOVERY_ENABLED, false);
   }
 
-  public int getConnectionTimeout() {
-    return finalConfig.getInt(CONNECTION_TIME_OUT, 1000);
-  }
-
-  public int getEventLoopSize() {
-    return finalConfig.getInt(EVENT_LOOP_SIZE, 2);
-  }
-
-  public int getVerticalInstanceCount() {
-    return finalConfig.getInt(VERTICAL_INSTANCE_COUNT, 1);
-  }
-
-  public int getIdleTimeoutInSeconds() {
-    return finalConfig.getInt(IDLE_TIMEOUT_IN_SECONDES, 60);
-  }
-
   public String getEnvironment() {
     return BootStrapProperties.readServiceEnvironment(finalConfig);
   }
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 4be4fe7..9d2923e 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
@@ -24,7 +24,13 @@ import java.util.Map;
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.commons.configuration.Configuration;
+import org.apache.http.HttpHost;
+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.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.servicecomb.config.center.client.AddressManager;
 import org.apache.servicecomb.config.center.client.ConfigCenterClient;
 import org.apache.servicecomb.config.center.client.ConfigCenterManager;
@@ -53,7 +59,7 @@ import com.netflix.config.WatchedUpdateResult;
 public class ConfigCenterConfigurationSourceImpl implements ConfigCenterConfigurationSource {
   private static final Logger LOGGER = LoggerFactory.getLogger(ConfigCenterConfigurationSourceImpl.class);
 
-  private List<WatchedUpdateListener> listeners = new CopyOnWriteArrayList<>();
+  private final List<WatchedUpdateListener> listeners = new CopyOnWriteArrayList<>();
 
   private ConfigCenterManager configCenterManager;
 
@@ -83,9 +89,8 @@ public class ConfigCenterConfigurationSourceImpl implements ConfigCenterConfigur
 
     AddressManager kieAddressManager = configKieAddressManager();
 
-    RequestConfig.Builder requestBuilder = HttpTransportFactory.defaultRequestConfig();
-
-    HttpTransport httpTransport = createHttpTransport(kieAddressManager.sslEnabled(), requestBuilder.build(),
+    HttpTransport httpTransport = createHttpTransport(kieAddressManager,
+        HttpTransportFactory.defaultRequestConfig().build(),
         localConfiguration);
     ConfigCenterClient configCenterClient = new ConfigCenterClient(kieAddressManager, httpTransport);
     EventManager.register(this);
@@ -136,13 +141,33 @@ public class ConfigCenterConfigurationSourceImpl implements ConfigCenterConfigur
     return request;
   }
 
-  private HttpTransport createHttpTransport(boolean sslEnabled, RequestConfig requestConfig,
+  private HttpTransport createHttpTransport(AddressManager kieAddressManager, RequestConfig requestConfig,
       Configuration localConfiguration) {
     List<AuthHeaderProvider> authHeaderProviders = SPIServiceUtils.getOrLoadSortedService(AuthHeaderProvider.class);
 
+    if (ConfigCenterConfig.INSTANCE.isProxyEnable()) {
+      HttpClientBuilder httpClientBuilder = HttpClientBuilder.create().
+          setDefaultRequestConfig(requestConfig);
+      HttpHost proxy = new HttpHost(ConfigCenterConfig.INSTANCE.getProxyHost(),
+          ConfigCenterConfig.INSTANCE.getProxyPort(), "http");  // now only support http proxy
+      httpClientBuilder.setProxy(proxy);
+      CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
+      credentialsProvider.setCredentials(new AuthScope(proxy),
+          new UsernamePasswordCredentials(ConfigCenterConfig.INSTANCE.getProxyUsername(),
+              ConfigCenterConfig.INSTANCE.getProxyPasswd()));
+      httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
+
+      return HttpTransportFactory
+          .createHttpTransport(
+              TransportUtils
+                  .createSSLProperties(kieAddressManager.sslEnabled(), localConfiguration, ConfigCenterConfig.SSL_TAG),
+              getRequestAuthHeaderProvider(authHeaderProviders), httpClientBuilder);
+    }
+
     return HttpTransportFactory
         .createHttpTransport(
-            TransportUtils.createSSLProperties(sslEnabled, localConfiguration, ConfigCenterConfig.SSL_TAG),
+            TransportUtils
+                .createSSLProperties(kieAddressManager.sslEnabled(), localConfiguration, ConfigCenterConfig.SSL_TAG),
             getRequestAuthHeaderProvider(authHeaderProviders), requestConfig);
   }
 
@@ -155,10 +180,9 @@ public class ConfigCenterConfigurationSourceImpl implements ConfigCenterConfigur
   }
 
   private AddressManager configKieAddressManager() {
-    AddressManager kieAddressManager = new AddressManager(ConfigCenterConfig.INSTANCE.getDomainName(),
+    return new AddressManager(ConfigCenterConfig.INSTANCE.getDomainName(),
         Deployment
             .getSystemBootStrapInfo(ConfigCenterDefaultDeploymentProvider.SYSTEM_KEY_CONFIG_CENTER).getAccessURL());
-    return kieAddressManager;
   }
 
   private void updateConfiguration(WatchedUpdateResult result) {
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 4bd8d04..7f93e1d 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
@@ -60,14 +60,6 @@ public class KieConfig {
 
   public static final String FILE_SOURCE = "servicecomb.config.client.fileSource";
 
-  public static final String CONNECTION_TIME_OUT = "servicecomb.kie.client.timeout.connection";
-
-  public static final String EVENT_LOOP_SIZE = "servicecomb.kie.client.eventLoopSize";
-
-  public static final String VERTICAL_INSTANCE_COUNT = "servicecomb.kie.client.verticalInstanceCount";
-
-  public static final String IDLE_TIMEOUT_IN_SECONDES = "servicecomb.kie.client.idleTimeoutInSeconds";
-
   private static final int DEFAULT_REFRESH_INTERVAL = 3000;
 
   private static final int DEFAULT_POLLING_WAIT_TIME = 10;
@@ -105,22 +97,6 @@ public class KieConfig {
     return Collections.EMPTY_LIST;
   }
 
-  public int getConnectionTimeOut() {
-    return finalConfig.getInt(CONNECTION_TIME_OUT, 1000);
-  }
-
-  public int getEventLoopSize() {
-    return finalConfig.getInt(EVENT_LOOP_SIZE, 2);
-  }
-
-  public int getVerticalInstanceCount() {
-    return finalConfig.getInt(VERTICAL_INSTANCE_COUNT, 1);
-  }
-
-  public int getIdleTimeoutInSeconds() {
-    return finalConfig.getInt(IDLE_TIMEOUT_IN_SECONDES, 60);
-  }
-
   public String getVersion() {
     return BootStrapProperties.readServiceVersion(finalConfig);
   }
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 6910822..48a5c71 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
@@ -26,7 +26,13 @@ import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.http.HttpHost;
+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.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;
@@ -85,7 +91,7 @@ public class KieConfigurationSourceImpl implements ConfigCenterConfigurationSour
       requestBuilder.setConnectionRequestTimeout(KieConfig.INSTANCE.getPollingWaitTime() * 2 * 1000);
       requestBuilder.setSocketTimeout(KieConfig.INSTANCE.getPollingWaitTime() * 2 * 1000);
     }
-    HttpTransport httpTransport = createHttpTransport(kieAddressManager.sslEnabled(), requestBuilder.build(),
+    HttpTransport httpTransport = createHttpTransport(kieAddressManager, requestBuilder.build(),
         localConfiguration);
     KieConfiguration kieConfiguration = createKieConfiguration();
     KieClient kieClient = new KieClient(kieAddressManager, httpTransport, kieConfiguration);
@@ -117,13 +123,33 @@ public class KieConfigurationSourceImpl implements ConfigCenterConfigurationSour
         .setServiceName(KieConfig.INSTANCE.getServiceName());
   }
 
-  private HttpTransport createHttpTransport(boolean sslEnabled, RequestConfig requestConfig,
+  private HttpTransport createHttpTransport(KieAddressManager kieAddressManager, RequestConfig requestConfig,
       Configuration localConfiguration) {
     List<AuthHeaderProvider> authHeaderProviders = SPIServiceUtils.getOrLoadSortedService(AuthHeaderProvider.class);
 
+    if (KieConfig.INSTANCE.isProxyEnable()) {
+      HttpClientBuilder httpClientBuilder = HttpClientBuilder.create().
+          setDefaultRequestConfig(requestConfig);
+      HttpHost proxy = new HttpHost(KieConfig.INSTANCE.getProxyHost(),
+          KieConfig.INSTANCE.getProxyPort(),"http"); // now only support http proxy
+      httpClientBuilder.setProxy(proxy);
+      CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
+      credentialsProvider.setCredentials(new AuthScope(proxy),
+          new UsernamePasswordCredentials(KieConfig.INSTANCE.getProxyUsername(),
+              KieConfig.INSTANCE.getProxyPasswd()));
+      httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
+
+      return HttpTransportFactory
+          .createHttpTransport(
+              TransportUtils
+                  .createSSLProperties(kieAddressManager.sslEnabled(), localConfiguration, KieConfig.SSL_TAG),
+              getRequestAuthHeaderProvider(authHeaderProviders), httpClientBuilder);
+    }
+
     return HttpTransportFactory
         .createHttpTransport(
-            TransportUtils.createSSLProperties(sslEnabled, localConfiguration, KieConfig.SSL_TAG),
+            TransportUtils
+                .createSSLProperties(kieAddressManager.sslEnabled(), localConfiguration, KieConfig.SSL_TAG),
             getRequestAuthHeaderProvider(authHeaderProviders), requestConfig);
   }