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 <[email protected]> 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 [email protected].
