You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2018/01/30 04:45:35 UTC

[incubator-servicecomb-java-chassis] 01/04: SCB-315 add common AddressResover configuration to foundation-vertx, and use it in service-registry and config-cc to support dynamic config by user

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

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

commit f289b433b2e51d71686bde05dca623316e9c8876
Author: jeho0815 <je...@email.com>
AuthorDate: Mon Jan 29 10:04:53 2018 +0800

    SCB-315 add common AddressResover configuration to foundation-vertx, and use it in service-registry and config-cc to support dynamic config by user
---
 .../src/main/resources/microservice.yaml           |   2 +-
 .../config/client/ConfigCenterClient.java          |   6 +-
 .../foundation/vertx/AddressResolverConfig.java    | 110 +++++++++++++++++++++
 .../foundation/vertx/TestAddressResoverConfig.java |  63 ++++++++++++
 service-registry/pom.xml                           |   1 -
 .../client/http/AbstractClientPool.java            |   6 +-
 6 files changed, 184 insertions(+), 4 deletions(-)

diff --git a/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml b/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml
index d7a69d8..bcb0252 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml
+++ b/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml
@@ -72,4 +72,4 @@ ssl.keyStore: server.p12
 ssl.keyStoreType: PKCS12
 ssl.keyStoreValue: Changeme_123
 ssl.crl: revoke.crl
-ssl.sslCustomClass: org.apache.servicecomb.demo.DemoSSLCustom
+ssl.sslCustomClass: org.apache.servicecomb.demo.DemoSSLCustom
\ No newline at end of file
diff --git a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java
index 89ff005..602f4a9 100644
--- a/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java
+++ b/dynamic-config/config-cc/src/main/java/org/apache/servicecomb/config/client/ConfigCenterClient.java
@@ -45,6 +45,7 @@ import org.apache.servicecomb.foundation.common.utils.JsonUtils;
 import org.apache.servicecomb.foundation.ssl.SSLCustom;
 import org.apache.servicecomb.foundation.ssl.SSLOption;
 import org.apache.servicecomb.foundation.ssl.SSLOptionFactory;
+import org.apache.servicecomb.foundation.vertx.AddressResolverConfig;
 import org.apache.servicecomb.foundation.vertx.VertxTLSBuilder;
 import org.apache.servicecomb.foundation.vertx.VertxUtils;
 import org.apache.servicecomb.foundation.vertx.client.ClientPoolManager;
@@ -59,6 +60,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
 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.CaseInsensitiveHeaders;
 import io.vertx.core.http.HttpClientOptions;
 import io.vertx.core.http.HttpClientRequest;
@@ -152,7 +154,9 @@ public class ConfigCenterClient {
   }
 
   private void deployConfigClient() throws InterruptedException {
-    Vertx vertx = VertxUtils.getOrCreateVertxByName("config-center", null);
+    VertxOptions vertxOptions = new VertxOptions();
+    vertxOptions.setAddressResolverOptions(AddressResolverConfig.getAddressResover(SSL_KEY));
+    Vertx vertx = VertxUtils.getOrCreateVertxByName("config-center", vertxOptions);
 
     HttpClientOptions httpClientOptions = createHttpClientOptions();
     clientMgr = new ClientPoolManager<>(vertx, new HttpClientPoolFactory(httpClientOptions));
diff --git a/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/AddressResolverConfig.java b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/AddressResolverConfig.java
new file mode 100644
index 0000000..a9bd5fe
--- /dev/null
+++ b/foundations/foundation-vertx/src/main/java/org/apache/servicecomb/foundation/vertx/AddressResolverConfig.java
@@ -0,0 +1,110 @@
+package org.apache.servicecomb.foundation.vertx;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.netflix.config.DynamicPropertyFactory;
+
+import io.vertx.core.dns.AddressResolverOptions;
+
+public class AddressResolverConfig {
+
+  /**
+   * get the target endpoints with custom address resolve config
+   * @param tag config tag, such as sc.consumer or cc.consumer
+   * @return AddressResolverOptions
+   */
+  public static AddressResolverOptions getAddressResover(String tag) {
+    AddressResolverOptions addressResolverOptions = new AddressResolverOptions();
+    addressResolverOptions
+        .setServers(getStringListProperty(AddressResolverOptions.DEFAULT_SEACH_DOMAINS,
+            "addressResolver." + tag + ".servers",
+            "addressResolver.servers"));
+    addressResolverOptions
+        .setOptResourceEnabled(getBooleanProperty(AddressResolverOptions.DEFAULT_OPT_RESOURCE_ENABLED,
+            "addressResolver." + tag + ".optResourceEnabled",
+            "addressResolver.optResourceEnabled"));
+    addressResolverOptions
+        .setCacheMinTimeToLive(getIntProperty(AddressResolverOptions.DEFAULT_CACHE_MIN_TIME_TO_LIVE,
+            "addressResolver." + tag + ".cacheMinTimeToLive",
+            "addressResolver.cacheMinTimeToLive"));
+    addressResolverOptions
+        .setCacheMaxTimeToLive(getIntProperty(AddressResolverOptions.DEFAULT_CACHE_MAX_TIME_TO_LIVE,
+            "addressResolver." + tag + ".cacheMaxTimeToLive",
+            "addressResolver.cacheMaxTimeToLive"));
+    addressResolverOptions
+        .setCacheNegativeTimeToLive(getIntProperty(AddressResolverOptions.DEFAULT_CACHE_NEGATIVE_TIME_TO_LIVE,
+            "addressResolver." + tag + ".cacheNegativeTimeToLive",
+            "addressResolver.cacheNegativeTimeToLive"));
+    addressResolverOptions
+        .setQueryTimeout(getIntProperty(AddressResolverOptions.DEFAULT_QUERY_TIMEOUT,
+            "addressResolver." + tag + ".queryTimeout",
+            "addressResolver.queryTimeout"));
+    addressResolverOptions
+        .setMaxQueries(getIntProperty(AddressResolverOptions.DEFAULT_MAX_QUERIES,
+            "addressResolver." + tag + ".maxQueries",
+            "addressResolver.maxQueries"));
+    addressResolverOptions
+        .setRdFlag(getBooleanProperty(AddressResolverOptions.DEFAULT_RD_FLAG,
+            "addressResolver." + tag + ".rdFlag",
+            "addressResolver.rdFlag"));
+    addressResolverOptions
+        .setSearchDomains(getStringListProperty(AddressResolverOptions.DEFAULT_SEACH_DOMAINS,
+            "addressResolver." + tag + ".searchDomains",
+            "addressResolver.searchDomains"));
+    addressResolverOptions
+        .setNdots(getIntProperty(AddressResolverOptions.DEFAULT_CACHE_MIN_TIME_TO_LIVE,
+            "addressResolver." + tag + ".ndots",
+            "addressResolver.ndots"));
+    addressResolverOptions
+        .setRotateServers(getBooleanProperty(AddressResolverOptions.DEFAULT_ROTATE_SERVERS,
+            "addressResolver." + tag + ".rotateServers",
+            "addressResolver.rotateServers"));
+    return addressResolverOptions;
+  }
+
+  private static List<String> getStringListProperty(List<String> defaultValue, String... keys) {
+    String property = null;
+    for (String key : keys) {
+      property = DynamicPropertyFactory.getInstance().getStringProperty(key, null).get();
+      if (property != null) {
+        break;
+      }
+    }
+    if (property != null) {
+      return Arrays.asList(property.split(","));
+    } else {
+      return defaultValue;
+    }
+  }
+
+  private static int getIntProperty(int defaultValue, String... keys) {
+    int property = -1;
+    for (String key : keys) {
+      property = DynamicPropertyFactory.getInstance().getIntProperty(key, -1).get();
+      if (property > 0) {
+        break;
+      }
+    }
+    if (property > 0) {
+      return property;
+    } else {
+      return defaultValue;
+    }
+  }
+
+  private static boolean getBooleanProperty(boolean defaultValue, String... keys) {
+    String property = null;
+    for (String key : keys) {
+      property = DynamicPropertyFactory.getInstance().getStringProperty(key, null).get();
+      if (property != null) {
+        break;
+      }
+    }
+    if (property != null) {
+      return Boolean.parseBoolean(property);
+    } else {
+      return defaultValue;
+    }
+  }
+}
diff --git a/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/TestAddressResoverConfig.java b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/TestAddressResoverConfig.java
new file mode 100644
index 0000000..b9470e3
--- /dev/null
+++ b/foundations/foundation-vertx/src/test/java/org/apache/servicecomb/foundation/vertx/TestAddressResoverConfig.java
@@ -0,0 +1,63 @@
+package org.apache.servicecomb.foundation.vertx;
+
+import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import io.vertx.core.dns.AddressResolverOptions;
+
+public class TestAddressResoverConfig {
+
+  @BeforeClass
+  public static void classSetup() {
+    ArchaiusUtils.resetConfig();
+  }
+
+  @AfterClass
+  public static void classTeardown() {
+    ArchaiusUtils.resetConfig();
+  }
+
+
+  @Test
+  public void testGetResover() {
+    ArchaiusUtils.resetConfig();
+    ArchaiusUtils.setProperty("addressResolver.servers", "8.8.8.8,8.8.4.4");
+    ArchaiusUtils.setProperty("addressResolver.optResourceEnabled", true);
+    ArchaiusUtils.setProperty("addressResolver.cacheMinTimeToLive", 0);
+    ArchaiusUtils.setProperty("addressResolver.cacheMaxTimeToLive", 10000);
+    ArchaiusUtils.setProperty("addressResolver.cacheNegativeTimeToLive", 0);
+    ArchaiusUtils.setProperty("addressResolver.queryTimeout", 1000);
+    ArchaiusUtils.setProperty("addressResolver.maxQueries", 3);
+    ArchaiusUtils.setProperty("addressResolver.test.maxQueries", 3);
+    ArchaiusUtils.setProperty("addressResolver.rdFlag", true);
+    ArchaiusUtils.setProperty("addressResolver.searchDomains",
+        "default.svc.local.cluster,svc.local.cluster,local.cluster");
+    ArchaiusUtils.setProperty("addressResolver.test.searchDomains",
+        "test.svc.local.cluster,svc.local.cluster,local.cluster");
+    ArchaiusUtils.setProperty("addressResolver.ndots", 3);
+    ArchaiusUtils.setProperty("addressResolver.rotateServers", true);
+    AddressResolverOptions aroc = AddressResolverConfig.getAddressResover("test");
+    Assert.assertEquals(2, aroc.getServers().size());
+    Assert.assertEquals("8.8.8.8", aroc.getServers().get(0));
+    Assert.assertEquals("test.svc.local.cluster", aroc.getSearchDomains().get(0));
+    AddressResolverOptions aroc1 = AddressResolverConfig.getAddressResover("test1");
+    Assert.assertEquals("default.svc.local.cluster", aroc1.getSearchDomains().get(0));
+  }
+
+  @Test
+  public void testGetResoverDefault() {
+    ArchaiusUtils.resetConfig();
+    ArchaiusUtils.setProperty("addressResolver.servers", "8.8.8.8,8.8.4.4");
+    ArchaiusUtils.setProperty("addressResolver.maxQueries", 3);
+    ArchaiusUtils.setProperty("addressResolver.rdFlag", false);
+    AddressResolverOptions aroc = AddressResolverConfig.getAddressResover("test");
+    Assert.assertEquals(2, aroc.getServers().size());
+    Assert.assertEquals(3, aroc.getMaxQueries());
+    Assert.assertEquals(Integer.MAX_VALUE, aroc.getCacheMaxTimeToLive());
+    Assert.assertTrue(aroc.isOptResourceEnabled());
+    Assert.assertNull(aroc.getSearchDomains());
+  }
+}
diff --git a/service-registry/pom.xml b/service-registry/pom.xml
index 306dddd..ae5895f 100644
--- a/service-registry/pom.xml
+++ b/service-registry/pom.xml
@@ -22,7 +22,6 @@
     <groupId>org.apache.servicecomb</groupId>
     <artifactId>java-chassis-parent</artifactId>
     <version>0.6.0-SNAPSHOT</version>
-    <relativePath>../parent</relativePath>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/AbstractClientPool.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/AbstractClientPool.java
index cb9b876..be8759a 100644
--- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/AbstractClientPool.java
+++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/AbstractClientPool.java
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.serviceregistry.client.http;
 
+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;
@@ -28,6 +29,7 @@ import org.slf4j.LoggerFactory;
 
 import io.vertx.core.DeploymentOptions;
 import io.vertx.core.Vertx;
+import io.vertx.core.VertxOptions;
 import io.vertx.core.http.HttpClientOptions;
 
 /**
@@ -50,7 +52,9 @@ public abstract class AbstractClientPool implements ClientPool {
 
   public void create() {
     // 这里面是同步接口,且好像直接在事件线程中用,保险起见,先使用独立的vertx实例
-    Vertx vertx = VertxUtils.getOrCreateVertxByName("registry", null);
+    VertxOptions vertxOptions = new VertxOptions();
+    vertxOptions.setAddressResolverOptions(AddressResolverConfig.getAddressResover(SSL_KEY));
+    Vertx vertx = VertxUtils.getOrCreateVertxByName("registry", vertxOptions);
     HttpClientOptions httpClientOptions = createHttpClientOptions();
     clientMgr = new ClientPoolManager<>(vertx, new HttpClientPoolFactory(httpClientOptions));
 

-- 
To stop receiving notification emails like this one, please contact
ningjiang@apache.org.