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.