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 2020/04/10 06:50:59 UTC

[servicecomb-java-chassis] branch master updated (e5efa35 -> e2d965b)

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

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


    from e5efa35  [SCB-1859] modify sdk error msg
     new 9187d24  [SCB-1861] fix config kie value parsing errors
     new e2d965b  [SCB-1848] refactor: modify config-kie module to use the new mechanism to intialize client

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../config/client/ConfigCenterConfig.java          | 27 ++-----
 .../client/ConfigCenterHttpClientOptionsSPI.java   |  7 ++
 .../kie/client/ConfigKieHttpClientOptionsSPI.java} | 41 ++++++-----
 .../servicecomb/config/kie/client/KieClient.java   | 84 +++++++++-------------
 .../servicecomb/config/kie/client/KieConfig.java   | 47 ++++++++++++
 .../servicecomb/config/kie/client/KieUtil.java     | 37 ++++++----
 .../servicecomb/config/kie/model/ValueType.java    | 22 ++----
 .../config/kie/client/TestKieClient.java           |  9 +--
 .../servicecomb/config/kie/client/TestKieUtil.java | 62 ++++++++++++++++
 .../{AsyncResultCallback.java => VertxConst.java}  | 20 +++---
 .../vertx/client/http/HttpClientOptionsSPI.java    |  5 ++
 .../foundation/vertx/client/http/HttpClients.java  |  3 +-
 .../client/http/RegistryHttpClientOptionsSPI.java  |  6 ++
 .../config/ServiceRegistryConfig.java              | 12 ----
 .../config/ServiceRegistryConfigBuilder.java       | 11 +--
 .../client/HttpTransportHttpClientOptionsSPI.java  |  7 ++
 16 files changed, 249 insertions(+), 151 deletions(-)
 copy dynamic-config/{config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterHttpClientOptionsSPI.java => config-kie/src/main/java/org/apache/servicecomb/config/kie/client/ConfigKieHttpClientOptionsSPI.java} (74%)
 create mode 100644 dynamic-config/config-kie/src/test/java/org/apache/servicecomb/config/kie/client/TestKieUtil.java
 copy foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/{AsyncResultCallback.java => VertxConst.java} (65%)


[servicecomb-java-chassis] 01/02: [SCB-1861] fix config kie value parsing errors

Posted by li...@apache.org.
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

commit 9187d24eb2c5c9a288c6572a6f43e8c936477772
Author: liubao <bi...@qq.com>
AuthorDate: Thu Apr 9 15:29:25 2020 +0800

    [SCB-1861] fix config kie value parsing errors
---
 .../servicecomb/config/kie/client/KieClient.java   |  2 +-
 .../servicecomb/config/kie/client/KieUtil.java     | 37 +++++++++++------
 .../servicecomb/config/kie/model/ValueType.java    | 22 +++--------
 .../servicecomb/config/kie/client/TestKieUtil.java | 46 ++++++++++++++++++++++
 4 files changed, 78 insertions(+), 29 deletions(-)

diff --git a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
index 7a7c9c7..adcff94 100644
--- a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
+++ b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
@@ -90,7 +90,7 @@ public class KieClient {
       EXECUTOR.execute(new ConfigRefresh(serviceUri));
     } else {
       EXECUTOR.scheduleWithFixedDelay(new ConfigRefresh(serviceUri), firstRefreshInterval,
-          refreshInterval, TimeUnit.SECONDS);
+          refreshInterval, TimeUnit.MILLISECONDS);
     }
   }
 
diff --git a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieUtil.java b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieUtil.java
index 2e5030d..74b2a4d 100644
--- a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieUtil.java
+++ b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieUtil.java
@@ -29,6 +29,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+
+import org.apache.commons.lang3.StringUtils;
 import org.apache.servicecomb.config.kie.model.KVDoc;
 import org.apache.servicecomb.config.kie.model.KVResponse;
 import org.apache.servicecomb.config.kie.model.ValueType;
@@ -36,7 +38,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
 import org.springframework.core.io.ByteArrayResource;
-import org.springframework.util.StringUtils;
 
 public class KieUtil {
 
@@ -109,36 +110,46 @@ public class KieUtil {
   }
 
   public static Map<String, String> processValueType(KVDoc kvDoc) {
-    ValueType vtype;
-    try {
-      vtype = ValueType.valueOf(kvDoc.getValueType());
-    } catch (IllegalArgumentException e) {
-      throw new RuntimeException("value type not support");
-    }
+    ValueType valueType = parseValueType(kvDoc.getValueType());
+
     Properties properties = new Properties();
     Map<String, String> kvMap = new HashMap<>();
     try {
-      if (vtype == (ValueType.YMAL) || vtype == (ValueType.YML)) {
+      if (valueType == (ValueType.YAML) || valueType == (ValueType.YML)) {
         YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();
         yamlFactory.setResources(new ByteArrayResource(kvDoc.getValue().getBytes()));
         properties = yamlFactory.getObject();
-      } else if (vtype == (ValueType.PROPERTIES)) {
+      } else if (valueType == (ValueType.PROPERTIES)) {
         properties.load(new StringReader(kvDoc.getValue()));
-      } else if (vtype == (ValueType.TEXT) || vtype == (ValueType.STRING)) {
+      } else if (valueType == (ValueType.TEXT) || valueType == (ValueType.STRING)) {
         kvMap.put(kvDoc.getKey(), kvDoc.getValue());
         return kvMap;
       } else {
+        // ValueType.JSON
         kvMap.put(kvDoc.getKey(), kvDoc.getValue());
         return kvMap;
       }
       kvMap = toMap(kvDoc.getKey(), properties);
       return kvMap;
     } catch (Exception e) {
-      LOGGER.error("read config failed");
+      LOGGER.error("read config failed", e);
     }
     return Collections.emptyMap();
   }
 
+  private static ValueType parseValueType(String valueType) {
+    if (StringUtils.isEmpty(valueType)) {
+      return ValueType.STRING;
+    }
+
+    try {
+      return ValueType.valueOf(valueType.toUpperCase());
+    } catch (IllegalArgumentException e) {
+      LOGGER.warn("read unrecognized value type {}", valueType);
+      return ValueType.STRING;
+    }
+  }
+
 
   @SuppressWarnings("unchecked")
   private static Map<String, String> toMap(String prefix, Properties properties) {
@@ -146,10 +157,12 @@ public class KieUtil {
     Enumeration<String> keys = (Enumeration<String>) properties.propertyNames();
     while (keys.hasMoreElements()) {
       String key = keys.nextElement();
+      Object value = properties.getProperty(key);
+
       if (!StringUtils.isEmpty(prefix)) {
         key = prefix + "." + key;
       }
-      Object value = properties.getProperty(key);
+
       if (value != null) {
         result.put(key, ((String) value).trim());
       } else {
diff --git a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/model/ValueType.java b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/model/ValueType.java
index 0658be2..8190878 100644
--- a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/model/ValueType.java
+++ b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/model/ValueType.java
@@ -18,20 +18,10 @@
 package org.apache.servicecomb.config.kie.model;
 
 public enum ValueType {
-  YML("yml"),
-  YMAL("yaml"),
-  STRING("string"),
-  TEXT("text"),
-  JSON("json"),
-  PROPERTIES("properties");
-  
-  private String value;
-
-  ValueType(String value) {
-    this.value = value;
-  }
-
-  public String getValue() {
-    return this.value;
-  }
+  YML,
+  YAML,
+  STRING,
+  TEXT,
+  JSON,
+  PROPERTIES
 }
diff --git a/dynamic-config/config-kie/src/test/java/org/apache/servicecomb/config/kie/client/TestKieUtil.java b/dynamic-config/config-kie/src/test/java/org/apache/servicecomb/config/kie/client/TestKieUtil.java
new file mode 100644
index 0000000..f5acc1b
--- /dev/null
+++ b/dynamic-config/config-kie/src/test/java/org/apache/servicecomb/config/kie/client/TestKieUtil.java
@@ -0,0 +1,46 @@
+package org.apache.servicecomb.config.kie.client;
+
+import java.util.Map;
+
+import org.apache.servicecomb.config.kie.model.KVDoc;
+import org.apache.servicecomb.config.kie.model.ValueType;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestKieUtil {
+  @Test
+  public void test_processValueType() {
+    KVDoc kvDoc = new KVDoc();
+    kvDoc.setKey("hello");
+    kvDoc.setValue("world");
+    Map<String, String> result = KieUtil.processValueType(kvDoc);
+    Assert.assertEquals("world", result.get("hello"));
+
+    kvDoc.setValueType("text");
+    result = KieUtil.processValueType(kvDoc);
+    Assert.assertEquals("world", result.get("hello"));
+
+    kvDoc.setValueType("string");
+    result = KieUtil.processValueType(kvDoc);
+    Assert.assertEquals("world", result.get("hello"));
+
+    kvDoc.setValueType("json");
+    result = KieUtil.processValueType(kvDoc);
+    Assert.assertEquals("world", result.get("hello"));
+
+    kvDoc.setValueType("yml");
+    kvDoc.setValue("hello: world");
+    result = KieUtil.processValueType(kvDoc);
+    Assert.assertEquals("world", result.get("hello.hello"));
+
+    kvDoc.setValueType("yaml");
+    kvDoc.setValue("hello: world");
+    result = KieUtil.processValueType(kvDoc);
+    Assert.assertEquals("world", result.get("hello.hello"));
+
+    kvDoc.setValueType("properties");
+    kvDoc.setValue("hello=world");
+    result = KieUtil.processValueType(kvDoc);
+    Assert.assertEquals("world", result.get("hello.hello"));
+  }
+}


[servicecomb-java-chassis] 02/02: [SCB-1848] refactor: modify config-kie module to use the new mechanism to intialize client

Posted by li...@apache.org.
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

commit e2d965b6e7f72e49eb753105aec08abe6767ab54
Author: liubao <bi...@qq.com>
AuthorDate: Thu Apr 9 17:35:12 2020 +0800

    [SCB-1848] refactor: modify config-kie module to use the new mechanism to intialize client
---
 .../config/client/ConfigCenterConfig.java          | 27 ++-----
 .../client/ConfigCenterHttpClientOptionsSPI.java   |  7 ++
 .../kie/client/ConfigKieHttpClientOptionsSPI.java} | 41 ++++++-----
 .../servicecomb/config/kie/client/KieClient.java   | 82 +++++++++-------------
 .../servicecomb/config/kie/client/KieConfig.java   | 47 +++++++++++++
 .../config/kie/client/TestKieClient.java           |  9 +--
 .../servicecomb/config/kie/client/TestKieUtil.java | 18 ++++-
 .../servicecomb/foundation/vertx/VertxConst.java   | 32 +++++++++
 .../vertx/client/http/HttpClientOptionsSPI.java    |  5 ++
 .../foundation/vertx/client/http/HttpClients.java  |  3 +-
 .../client/http/RegistryHttpClientOptionsSPI.java  |  6 ++
 .../config/ServiceRegistryConfig.java              | 12 ----
 .../config/ServiceRegistryConfigBuilder.java       | 11 +--
 .../client/HttpTransportHttpClientOptionsSPI.java  |  7 ++
 14 files changed, 194 insertions(+), 113 deletions(-)

diff --git a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java
index e71e548..e0ff19a 100644
--- a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java
+++ b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterConfig.java
@@ -24,6 +24,7 @@ import java.util.List;
 
 import org.apache.servicecomb.deployment.Deployment;
 import org.apache.servicecomb.deployment.DeploymentProvider;
+import org.apache.servicecomb.foundation.vertx.VertxConst;
 
 import com.google.common.base.Joiner;
 import com.netflix.config.ConcurrentCompositeConfiguration;
@@ -59,18 +60,6 @@ public final class ConfigCenterConfig {
 
   private static final String INSTANCE_TAGS = "instance_description.properties.tags";
 
-  public static final String PROXY_PRE_NAME = "servicecomb.proxy.";
-
-  public static final String PROXY_ENABLE = PROXY_PRE_NAME + "enable";
-
-  public static final String PROXY_HOST = PROXY_PRE_NAME + "host";
-
-  public static final String PROXY_PORT = PROXY_PRE_NAME + "port";
-
-  public static final String PROXY_USERNAME = PROXY_PRE_NAME + "username";
-
-  public static final String PROXY_PASSWD = PROXY_PRE_NAME + "passwd";
-
   public static final String CONNECTION_TIME_OUT = "servicecomb.config.client.timeout.connection";
 
   public static final String EVENT_LOOP_SIZE = "servicecomb.config.client.eventLoopSize";
@@ -87,8 +76,6 @@ public final class ConfigCenterConfig {
 
   private static final int DEFAULT_FIRST_REFRESH_INTERVAL = 0;
 
-  private static final int DEFAULT_TIMEOUT_IN_MS = 30000;
-
   private ConfigCenterConfig() {
   }
 
@@ -96,7 +83,7 @@ public final class ConfigCenterConfig {
     finalConfig = config;
   }
 
-  public ConcurrentCompositeConfiguration getConcurrentCompositeConfiguration() {
+  public static ConcurrentCompositeConfiguration getConcurrentCompositeConfiguration() {
     return finalConfig;
   }
 
@@ -133,23 +120,23 @@ public final class ConfigCenterConfig {
   }
 
   public Boolean isProxyEnable() {
-    return finalConfig.getBoolean(PROXY_ENABLE, false);
+    return finalConfig.getBoolean(VertxConst.PROXY_ENABLE, false);
   }
 
   public String getProxyHost() {
-    return finalConfig.getString(PROXY_HOST, "127.0.0.1");
+    return finalConfig.getString(VertxConst.PROXY_HOST, "127.0.0.1");
   }
 
   public int getProxyPort() {
-    return finalConfig.getInt(PROXY_PORT, 8080);
+    return finalConfig.getInt(VertxConst.PROXY_PORT, 8080);
   }
 
   public String getProxyUsername() {
-    return finalConfig.getString(PROXY_USERNAME, null);
+    return finalConfig.getString(VertxConst.PROXY_USERNAME, null);
   }
 
   public String getProxyPasswd() {
-    return finalConfig.getString(PROXY_PASSWD, null);
+    return finalConfig.getString(VertxConst.PROXY_PASSWD, null);
   }
 
   @SuppressWarnings("unchecked")
diff --git a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterHttpClientOptionsSPI.java b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterHttpClientOptionsSPI.java
index 3b3c4d8..15a2400 100644
--- a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterHttpClientOptionsSPI.java
+++ b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterHttpClientOptionsSPI.java
@@ -21,6 +21,8 @@ import org.apache.servicecomb.deployment.Deployment;
 import org.apache.servicecomb.deployment.DeploymentProvider;
 import org.apache.servicecomb.foundation.vertx.client.http.HttpClientOptionsSPI;
 
+import com.netflix.config.ConcurrentCompositeConfiguration;
+
 import io.vertx.core.VertxOptions;
 import io.vertx.core.http.HttpClientOptions;
 import io.vertx.core.http.HttpVersion;
@@ -49,6 +51,11 @@ public class ConfigCenterHttpClientOptionsSPI implements HttpClientOptionsSPI {
   }
 
   @Override
+  public ConcurrentCompositeConfiguration getConfigReader() {
+    return ConfigCenterConfig.getConcurrentCompositeConfiguration();
+  }
+
+  @Override
   public int getEventLoopPoolSize() {
     return ConfigCenterConfig.INSTANCE.getEventLoopSize();
   }
diff --git a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterHttpClientOptionsSPI.java b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/ConfigKieHttpClientOptionsSPI.java
similarity index 74%
copy from dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterHttpClientOptionsSPI.java
copy to dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/ConfigKieHttpClientOptionsSPI.java
index 3b3c4d8..6921a56 100644
--- a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterHttpClientOptionsSPI.java
+++ b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/ConfigKieHttpClientOptionsSPI.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.config.client;
+package org.apache.servicecomb.config.kie.client;
 
-import org.apache.servicecomb.deployment.Deployment;
-import org.apache.servicecomb.deployment.DeploymentProvider;
 import org.apache.servicecomb.foundation.vertx.client.http.HttpClientOptionsSPI;
 
+import com.netflix.config.ConcurrentCompositeConfiguration;
+
 import io.vertx.core.VertxOptions;
 import io.vertx.core.http.HttpClientOptions;
 import io.vertx.core.http.HttpVersion;
 
-public class ConfigCenterHttpClientOptionsSPI implements HttpClientOptionsSPI {
-  public static final String CLIENT_NAME = "config-center";
+public class ConfigKieHttpClientOptionsSPI implements HttpClientOptionsSPI {
+  public static final String CLIENT_NAME = "config-kie";
 
   @Override
   public String clientName() {
@@ -35,22 +35,27 @@ public class ConfigCenterHttpClientOptionsSPI implements HttpClientOptionsSPI {
 
   @Override
   public int getOrder() {
-    return -100;
+    return -200;
   }
 
   @Override
   public boolean enabled() {
-    return Deployment.getSystemBootStrapInfo(DeploymentProvider.SYSTEM_KEY_CONFIG_CENTER) != null;
+    return KieConfig.INSTANCE.getServerUri() != null;
   }
 
   @Override
   public String getConfigTag() {
-    return "cc.consumer";
+    return "kie.consumer";
+  }
+
+  @Override
+  public ConcurrentCompositeConfiguration getConfigReader() {
+    return KieConfig.getFinalConfig();
   }
 
   @Override
   public int getEventLoopPoolSize() {
-    return ConfigCenterConfig.INSTANCE.getEventLoopSize();
+    return KieConfig.INSTANCE.getEventLoopSize();
   }
 
   @Override
@@ -60,7 +65,7 @@ public class ConfigCenterHttpClientOptionsSPI implements HttpClientOptionsSPI {
 
   @Override
   public int getInstanceCount() {
-    return ConfigCenterConfig.INSTANCE.getVerticalInstanceCount();
+    return KieConfig.INSTANCE.getVerticalInstanceCount();
   }
 
   @Override
@@ -85,12 +90,12 @@ public class ConfigCenterHttpClientOptionsSPI implements HttpClientOptionsSPI {
 
   @Override
   public int getConnectTimeoutInMillis() {
-    return ConfigCenterConfig.INSTANCE.getConnectionTimeout();
+    return KieConfig.INSTANCE.getConnectionTimeOut();
   }
 
   @Override
   public int getIdleTimeoutInSeconds() {
-    return ConfigCenterConfig.INSTANCE.getIdleTimeoutInSeconds();
+    return KieConfig.INSTANCE.getIdleTimeoutInSeconds();
   }
 
   @Override
@@ -140,31 +145,31 @@ public class ConfigCenterHttpClientOptionsSPI implements HttpClientOptionsSPI {
 
   @Override
   public boolean isProxyEnable() {
-    return ConfigCenterConfig.INSTANCE.isProxyEnable();
+    return KieConfig.INSTANCE.isProxyEnable();
   }
 
   @Override
   public String getProxyHost() {
-    return ConfigCenterConfig.INSTANCE.getProxyHost();
+    return KieConfig.INSTANCE.getProxyHost();
   }
 
   @Override
   public int getProxyPort() {
-    return ConfigCenterConfig.INSTANCE.getProxyPort();
+    return KieConfig.INSTANCE.getProxyPort();
   }
 
   @Override
   public String getProxyUsername() {
-    return ConfigCenterConfig.INSTANCE.getProxyUsername();
+    return KieConfig.INSTANCE.getProxyUsername();
   }
 
   @Override
   public String getProxyPassword() {
-    return ConfigCenterConfig.INSTANCE.getProxyPasswd();
+    return KieConfig.INSTANCE.getProxyPasswd();
   }
 
   @Override
   public boolean isSsl() {
-    return ConfigCenterConfig.INSTANCE.getServerUri().get(0).startsWith("https");
+    return KieConfig.INSTANCE.getServerUri() != null && KieConfig.INSTANCE.getServerUri().startsWith("https");
   }
 }
diff --git a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
index adcff94..362a90d 100644
--- a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
+++ b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieClient.java
@@ -17,18 +17,14 @@
 
 package org.apache.servicecomb.config.kie.client;
 
-import io.netty.handler.codec.http.HttpResponseStatus;
-import io.vertx.core.DeploymentOptions;
-import io.vertx.core.Vertx;
-import io.vertx.core.VertxOptions;
-import io.vertx.core.http.HttpClientOptions;
-import io.vertx.core.http.HttpClientRequest;
 import java.io.IOException;
 import java.util.Map;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
+
 import org.apache.http.HttpStatus;
 import org.apache.servicecomb.config.kie.archaius.sources.KieConfigurationSourceImpl.UpdateHandler;
 import org.apache.servicecomb.config.kie.model.KVResponse;
@@ -36,15 +32,12 @@ import org.apache.servicecomb.foundation.common.event.EventManager;
 import org.apache.servicecomb.foundation.common.net.IpPort;
 import org.apache.servicecomb.foundation.common.net.NetUtils;
 import org.apache.servicecomb.foundation.common.utils.JsonUtils;
-import org.apache.servicecomb.foundation.vertx.AddressResolverConfig;
-import org.apache.servicecomb.foundation.vertx.VertxUtils;
-import org.apache.servicecomb.foundation.vertx.client.ClientPoolManager;
-import org.apache.servicecomb.foundation.vertx.client.ClientVerticle;
-import org.apache.servicecomb.foundation.vertx.client.http.HttpClientPoolFactory;
-import org.apache.servicecomb.foundation.vertx.client.http.HttpClientWithContext;
+import org.apache.servicecomb.foundation.vertx.client.http.HttpClients;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import io.vertx.core.http.HttpClientRequest;
+
 public class KieClient {
 
   private static final Logger LOGGER = LoggerFactory.getLogger(KieClient.class);
@@ -56,13 +49,13 @@ public class KieClient {
     return thread;
   });
 
-  private static final long TIME_OUT = 10000;
+  private static final long PULL_REQUEST_TIME_OUT_IN_MILLIS = 10000;
 
-  private static AtomicBoolean IS_FIRST_PULL = new AtomicBoolean(true);
+  private static final long LONG_POLLING_REQUEST_TIME_OUT_IN_MILLIS = 60000;
 
-  private static final int LONG_POLLING_WAIT_TIME = 30;
+  private static AtomicBoolean IS_FIRST_PULL = new AtomicBoolean(true);
 
-  private static final int SOCKET_TIMOUT = 50;
+  private static final int LONG_POLLING_WAIT_TIME_IN_SECONDS = 30;
 
   private static final KieConfig KIE_CONFIG = KieConfig.INSTANCE;
 
@@ -74,18 +67,12 @@ public class KieClient {
 
   private final String serviceUri = KIE_CONFIG.getServerUri();
 
-  private ClientPoolManager<HttpClientWithContext> clientMgr;
-
   public KieClient(UpdateHandler updateHandler) {
+    HttpClients.addNewClientPoolManager(new ConfigKieHttpClientOptionsSPI());
     KieWatcher.INSTANCE.setUpdateHandler(updateHandler);
   }
 
   public void refreshKieConfig() {
-    try {
-      deployConfigClient();
-    } catch (InterruptedException e) {
-      throw new IllegalStateException(e);
-    }
     if (enableLongPolling) {
       EXECUTOR.execute(new ConfigRefresh(serviceUri));
     } else {
@@ -94,21 +81,6 @@ public class KieClient {
     }
   }
 
-  private void deployConfigClient() throws InterruptedException {
-    VertxOptions vertxOptions = new VertxOptions();
-    vertxOptions.setAddressResolverOptions(AddressResolverConfig.getAddressResover("kie.consumer",
-        KieConfig.getFinalConfig()));
-    Vertx vertx = VertxUtils.getOrCreateVertxByName("kie", vertxOptions);
-
-    HttpClientOptions httpClientOptions = new HttpClientOptions();
-    httpClientOptions.setKeepAlive(true);
-    httpClientOptions.setIdleTimeout(SOCKET_TIMOUT);
-    clientMgr = new ClientPoolManager<>(vertx, new HttpClientPoolFactory(httpClientOptions));
-
-    DeploymentOptions deployOptions = VertxUtils.createClientDeployOptions(clientMgr, 1);
-    VertxUtils.blockDeploy(vertx, ClientVerticle.class, deployOptions);
-  }
-
   public void destroy() {
     if (EXECUTOR != null) {
       EXECUTOR.shutdown();
@@ -127,29 +99,38 @@ public class KieClient {
     @Override
     public void run() {
       try {
-        refreshConfig();
+        CountDownLatch latch = new CountDownLatch(1);
+        refreshConfig(latch);
+        latch.await();
       } catch (Throwable e) {
         LOGGER.error("client refresh thread exception ", e);
       }
+      if (enableLongPolling) {
+        EXECUTOR.execute(this);
+      }
     }
 
     @SuppressWarnings("deprecation")
-    void refreshConfig() {
+    void refreshConfig(CountDownLatch latch) {
       String path = "/v1/"
           + KieConfig.INSTANCE.getDomainName()
           + "/kie/kv?label=app:"
           + KieConfig.INSTANCE.getAppName();
+
+      long timeout;
       if (enableLongPolling && !IS_FIRST_PULL.get()) {
-        path += "&wait=" + LONG_POLLING_WAIT_TIME + "s";
+        path += "&wait=" + LONG_POLLING_WAIT_TIME_IN_SECONDS + "s";
+        timeout = LONG_POLLING_REQUEST_TIME_OUT_IN_MILLIS;
       } else {
         IS_FIRST_PULL.compareAndSet(true, false);
+        timeout = PULL_REQUEST_TIME_OUT_IN_MILLIS;
       }
       String finalPath = path;
-      clientMgr.findThreadBindClientPool().runOnContext(client -> {
+      HttpClients.getClient(ConfigKieHttpClientOptionsSPI.CLIENT_NAME).runOnContext(client -> {
         IpPort ipPort = NetUtils.parseIpPortFromURI(serviceUri);
         HttpClientRequest request = client
             .get(ipPort.getPort(), ipPort.getHostOrIp(), finalPath, rsp -> {
-              if (rsp.statusCode() == HttpResponseStatus.OK.code()) {
+              if (rsp.statusCode() == HttpStatus.SC_OK) {
                 rsp.bodyHandler(buf -> {
                   try {
                     Map<String, Object> resMap = KieUtil.getConfigByLabel(JsonUtils.OBJ_MAPPER
@@ -163,24 +144,27 @@ public class KieClient {
                         serviceUri,
                         e.getMessage());
                   }
+                  latch.countDown();
                 });
-              } else if (rsp.statusCode() == HttpStatus.SC_NOT_FOUND) {
+              } else if (rsp.statusCode() == HttpStatus.SC_NOT_MODIFIED) {
                 EventManager.post(new ConnSuccEvent());
+                latch.countDown();
               } else {
                 EventManager.post(new ConnFailEvent("fetch config fail"));
-                LOGGER.error("Config update from {} failed. Error message is [{}].",
+                LOGGER.error("Config update from {} failed. Error code is {}, error message is [{}].",
                     serviceUri,
+                    rsp.statusCode(),
                     rsp.statusMessage());
+                latch.countDown();
               }
-              if (enableLongPolling) {
-                EXECUTOR.execute(this);
-              }
-            }).setTimeout(TIME_OUT);
+            }).setTimeout(timeout);
+
         request.exceptionHandler(e -> {
           EventManager.post(new ConnFailEvent("fetch config fail"));
           LOGGER.error("Config update from {} failed. Error message is [{}].",
               serviceUri,
               e.getMessage());
+          latch.countDown();
         });
         request.end();
       });
diff --git a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieConfig.java b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieConfig.java
index e95475f..bc80598 100644
--- a/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieConfig.java
+++ b/dynamic-config/config-kie/src/main/java/org/apache/servicecomb/config/kie/client/KieConfig.java
@@ -20,6 +20,8 @@ package org.apache.servicecomb.config.kie.client;
 import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.DEFAULT_SERVICECOMB_ENV;
 import static org.apache.servicecomb.foundation.common.base.ServiceCombConstants.SERVICECOMB_ENV;
 
+import org.apache.servicecomb.foundation.vertx.VertxConst;
+
 import com.netflix.config.ConcurrentCompositeConfiguration;
 
 public class KieConfig {
@@ -46,6 +48,14 @@ public class KieConfig {
 
   private static final String INSTANCE_TAGS = "instance_description.properties.tags";
 
+  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_FIRST_REFRESH_INTERVAL = 0;
@@ -63,6 +73,22 @@ public class KieConfig {
     KieConfig.finalConfig = finalConfig;
   }
 
+  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 finalConfig.getString(SERVICE_VERSION);
   }
@@ -102,4 +128,25 @@ public class KieConfig {
   public boolean enableLongPolling() {
     return finalConfig.getBoolean(ENABLE_LONG_POLLING, DEFAULT_ENABLE_LONG_POLLING);
   }
+
+  public Boolean isProxyEnable() {
+    return finalConfig.getBoolean(VertxConst.PROXY_ENABLE, false);
+  }
+
+  public String getProxyHost() {
+    return finalConfig.getString(VertxConst.PROXY_HOST, "127.0.0.1");
+  }
+
+  public int getProxyPort() {
+    return finalConfig.getInt(VertxConst.PROXY_PORT, 8080);
+  }
+
+  public String getProxyUsername() {
+    return finalConfig.getString(VertxConst.PROXY_USERNAME, null);
+  }
+
+  public String getProxyPasswd() {
+    return finalConfig.getString(VertxConst.PROXY_PASSWD, null);
+  }
+
 }
diff --git a/dynamic-config/config-kie/src/test/java/org/apache/servicecomb/config/kie/client/TestKieClient.java b/dynamic-config/config-kie/src/test/java/org/apache/servicecomb/config/kie/client/TestKieClient.java
index 9a5d81f..0a61f75 100644
--- a/dynamic-config/config-kie/src/test/java/org/apache/servicecomb/config/kie/client/TestKieClient.java
+++ b/dynamic-config/config-kie/src/test/java/org/apache/servicecomb/config/kie/client/TestKieClient.java
@@ -178,14 +178,9 @@ public class TestKieClient {
         handler.run(httpClient);
       }
     };
-    new Expectations() {
-      {
-        clientMgr.findThreadBindClientPool();
-        result = httpClientWithContext;
-      }
-    };
+
     KieClient kie = new KieClient(updateHandler);
-    Deencapsulation.setField(kie, "clientMgr", clientMgr);
+
     ConfigRefresh refresh = kie.new ConfigRefresh("http://configcentertest:30103");
     refresh.run();
     Assert.assertEquals("Fail event trigger", map.get("result"));
diff --git a/dynamic-config/config-kie/src/test/java/org/apache/servicecomb/config/kie/client/TestKieUtil.java b/dynamic-config/config-kie/src/test/java/org/apache/servicecomb/config/kie/client/TestKieUtil.java
index f5acc1b..a27cf31 100644
--- a/dynamic-config/config-kie/src/test/java/org/apache/servicecomb/config/kie/client/TestKieUtil.java
+++ b/dynamic-config/config-kie/src/test/java/org/apache/servicecomb/config/kie/client/TestKieUtil.java
@@ -1,9 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package org.apache.servicecomb.config.kie.client;
 
 import java.util.Map;
 
 import org.apache.servicecomb.config.kie.model.KVDoc;
-import org.apache.servicecomb.config.kie.model.ValueType;
 import org.junit.Assert;
 import org.junit.Test;
 
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxConst.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxConst.java
new file mode 100644
index 0000000..1ee2afa
--- /dev/null
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/VertxConst.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.servicecomb.foundation.vertx;
+
+public final class VertxConst {
+  public static final String PROXY_PRE_NAME = "servicecomb.proxy.";
+
+  public static final String PROXY_ENABLE = PROXY_PRE_NAME + "enable";
+
+  public static final String PROXY_HOST = PROXY_PRE_NAME + "host";
+
+  public static final String PROXY_PORT = PROXY_PRE_NAME + "port";
+
+  public static final String PROXY_USERNAME = PROXY_PRE_NAME + "username";
+
+  public static final String PROXY_PASSWD = PROXY_PRE_NAME + "passwd";
+}
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClientOptionsSPI.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClientOptionsSPI.java
index dc942ae..164e4f4 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClientOptionsSPI.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClientOptionsSPI.java
@@ -20,6 +20,8 @@ package org.apache.servicecomb.foundation.vertx.client.http;
 import org.apache.servicecomb.foundation.common.encrypt.Encryptions;
 import org.apache.servicecomb.foundation.vertx.VertxTLSBuilder;
 
+import com.netflix.config.ConcurrentCompositeConfiguration;
+
 import io.vertx.core.http.HttpClientOptions;
 import io.vertx.core.http.HttpVersion;
 import io.vertx.core.net.ProxyOptions;
@@ -41,6 +43,9 @@ public interface HttpClientOptionsSPI {
   *  other clients configuration or read the common configuration. */
   String getConfigTag();
 
+  /* for config modules, the configuration is not ready, need set up config reader */
+  ConcurrentCompositeConfiguration getConfigReader();
+
   /*****************  vert.x common settings ***************************/
   int getEventLoopPoolSize();
 
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClients.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClients.java
index 3db635d..74c3593 100644
--- a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClients.java
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/client/http/HttpClients.java
@@ -86,7 +86,8 @@ public class HttpClients {
       vertx = SharedVertxFactory.getSharedVertx();
     } else {
       VertxOptions vertxOptions = new VertxOptions()
-          .setAddressResolverOptions(AddressResolverConfig.getAddressResover(option.getConfigTag()))
+          .setAddressResolverOptions(AddressResolverConfig
+              .getAddressResover(option.getConfigTag(), option.getConfigReader()))
           .setEventLoopPoolSize(option.getEventLoopPoolSize());
 
       // Maybe we can deploy only one vert.x for the application. However this has did it like this.
diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RegistryHttpClientOptionsSPI.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RegistryHttpClientOptionsSPI.java
index b8869e0..b465252 100644
--- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RegistryHttpClientOptionsSPI.java
+++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RegistryHttpClientOptionsSPI.java
@@ -20,6 +20,7 @@ package org.apache.servicecomb.serviceregistry.client.http;
 import org.apache.servicecomb.foundation.vertx.client.http.HttpClientOptionsSPI;
 import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig;
 
+import com.netflix.config.ConcurrentCompositeConfiguration;
 import com.netflix.config.DynamicPropertyFactory;
 
 import io.vertx.core.VertxOptions;
@@ -52,6 +53,11 @@ public class RegistryHttpClientOptionsSPI implements HttpClientOptionsSPI {
   }
 
   @Override
+  public ConcurrentCompositeConfiguration getConfigReader() {
+    return null;
+  }
+
+  @Override
   public int getEventLoopPoolSize() {
     return DynamicPropertyFactory.getInstance()
         .getIntProperty(ServiceRegistryConfig.EVENT_LOOP_POOL_SIZE, 4).get();
diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/config/ServiceRegistryConfig.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/config/ServiceRegistryConfig.java
index af1e5d7..a926b27 100644
--- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/config/ServiceRegistryConfig.java
+++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/config/ServiceRegistryConfig.java
@@ -60,18 +60,6 @@ public final class ServiceRegistryConfig {
 
   public static final String NO_DOMAIN = "default";
 
-  public static final String PROXY_PRE_NAME = "servicecomb.proxy.";
-
-  public static final String PROXY_ENABLE = PROXY_PRE_NAME + "enable";
-
-  public static final String PROXY_HOST = PROXY_PRE_NAME + "host";
-
-  public static final String PROXY_PORT = PROXY_PRE_NAME + "port";
-
-  public static final String PROXY_USERNAME = PROXY_PRE_NAME + "username";
-
-  public static final String PROXY_PASSWD = PROXY_PRE_NAME + "passwd";
-
   public static final String SSL_KEY = "sc.consumer";
 
   public static final String PROXY_KEY = "sc.consumer";
diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/config/ServiceRegistryConfigBuilder.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/config/ServiceRegistryConfigBuilder.java
index edb615f..e8c31cc 100644
--- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/config/ServiceRegistryConfigBuilder.java
+++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/config/ServiceRegistryConfigBuilder.java
@@ -28,6 +28,7 @@ import org.apache.servicecomb.foundation.auth.AuthHeaderProvider;
 import org.apache.servicecomb.foundation.common.net.IpPort;
 import org.apache.servicecomb.foundation.common.net.NetUtils;
 import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
+import org.apache.servicecomb.foundation.vertx.VertxConst;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -268,25 +269,25 @@ class ServiceRegistryConfigBuilder {
   }
 
   public Boolean isProxyEnable() {
-    String enable = getProperty("false", ServiceRegistryConfig.PROXY_ENABLE);
+    String enable = getProperty("false", VertxConst.PROXY_ENABLE);
     return Boolean.parseBoolean(enable);
   }
 
   public String getProxyHost() {
-    return getProperty("127.0.0.1", ServiceRegistryConfig.PROXY_HOST);
+    return getProperty("127.0.0.1", VertxConst.PROXY_HOST);
   }
 
   public int getProxyPort() {
-    String port = getProperty("8080", ServiceRegistryConfig.PROXY_PORT);
+    String port = getProperty("8080", VertxConst.PROXY_PORT);
     return Integer.parseInt(port);
   }
 
   public String getProxyUsername() {
-    return getProperty(null, ServiceRegistryConfig.PROXY_USERNAME);
+    return getProperty(null, VertxConst.PROXY_USERNAME);
   }
 
   public String getProxyPasswd() {
-    return getProperty(null, ServiceRegistryConfig.PROXY_PASSWD);
+    return getProperty(null, VertxConst.PROXY_PASSWD);
   }
 
   public List<AuthHeaderProvider> getAuthHeaderProviders() {
diff --git a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/HttpTransportHttpClientOptionsSPI.java b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/HttpTransportHttpClientOptionsSPI.java
index 619bb03..3bee8df 100644
--- a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/HttpTransportHttpClientOptionsSPI.java
+++ b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/HttpTransportHttpClientOptionsSPI.java
@@ -19,6 +19,8 @@ package org.apache.servicecomb.transport.rest.client;
 
 import org.apache.servicecomb.foundation.vertx.client.http.HttpClientOptionsSPI;
 
+import com.netflix.config.ConcurrentCompositeConfiguration;
+
 import io.vertx.core.VertxOptions;
 import io.vertx.core.http.HttpClientOptions;
 import io.vertx.core.http.HttpVersion;
@@ -49,6 +51,11 @@ public class HttpTransportHttpClientOptionsSPI implements HttpClientOptionsSPI {
   }
 
   @Override
+  public ConcurrentCompositeConfiguration getConfigReader() {
+    return null;
+  }
+
+  @Override
   public int getEventLoopPoolSize() {
     // not reading this, using shared transport vert.x
     return -1;