This is an automated email from the ASF dual-hosted git repository. yaohaishi pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit bbd7702fbee7df950ef43d703f604f4b3fc90140 Author: yhs0092 <[email protected]> AuthorDate: Mon Feb 17 09:19:31 2020 +0800 [SCB-1691] support multiple TLS enabled sc clusters - RemoteServiceRegistry create ServiceRegistryClient by the constructor in ServiceRegistryConfig - AbstractClientPool accept ServiceRegistryConfig in constructor - Allow to specify registry client TLS and proxy config by custom tags --- .../client/http/AbstractClientPool.java | 12 +++++-- .../client/http/HttpClientPool.java | 13 +++---- .../client/http/WebsocketClientPool.java | 11 +++--- .../config/ServiceRegistryConfig.java | 41 ++++++++++++++++++++++ .../registry/RemoteServiceRegistry.java | 3 +- .../client/http/TestHttpClientPool.java | 24 ++++++++++--- .../client/http/TestWebsocketClientPool.java | 12 +++++-- 7 files changed, 94 insertions(+), 22 deletions(-) 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 968d858..c709692 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 @@ -41,17 +41,23 @@ import io.vertx.core.http.HttpClientOptions; abstract class AbstractClientPool implements ClientPool { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractClientPool.class); + private ServiceRegistryConfig serviceRegistryConfig; + private HttpClientOptions httpClientOptions; private ClientPoolManager<HttpClientWithContext> clientMgr; - AbstractClientPool(HttpClientOptions httpClientOptions) { - this.httpClientOptions = httpClientOptions; + AbstractClientPool(ServiceRegistryConfig serviceRegistryConfig) { + this.serviceRegistryConfig = serviceRegistryConfig; + this.httpClientOptions = getHttpClientOptionsFromConfigurations(serviceRegistryConfig); create(); } protected abstract boolean isWorker(); + protected abstract HttpClientOptions getHttpClientOptionsFromConfigurations( + ServiceRegistryConfig serviceRegistryConfig); + public HttpClientWithContext getClient() { return this.clientMgr.findThreadBindClientPool(); } @@ -64,7 +70,7 @@ abstract class AbstractClientPool implements ClientPool { // 这里面是同步接口,且好像直接在事件线程中用,保险起见,先使用独立的vertx实例 VertxOptions vertxOptions = new VertxOptions() - .setAddressResolverOptions(AddressResolverConfig.getAddressResover(ServiceRegistryConfig.SSL_KEY)) + .setAddressResolverOptions(AddressResolverConfig.getAddressResover(serviceRegistryConfig.getSslConfigTag())) .setEventLoopPoolSize(property.get()); Vertx vertx = VertxUtils.getOrCreateVertxByName("registry", vertxOptions); clientMgr = new ClientPoolManager<>(vertx, new HttpClientPoolFactory(httpClientOptions)); diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/HttpClientPool.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/HttpClientPool.java index f4d28c8..962a81c 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/HttpClientPool.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/HttpClientPool.java @@ -27,7 +27,7 @@ import io.vertx.core.http.HttpClientOptions; import io.vertx.core.http.HttpVersion; import io.vertx.core.net.ProxyOptions; -final class HttpClientPool extends AbstractClientPool { +class HttpClientPool extends AbstractClientPool { private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientPool.class); @@ -37,11 +37,11 @@ final class HttpClientPool extends AbstractClientPool { public static final HttpClientPool INSTANCE = new HttpClientPool(); private HttpClientPool() { - super(getHttpClientOptionsFromConfigurations(ServiceRegistryConfig.INSTANCE)); + super(ServiceRegistryConfig.INSTANCE); } HttpClientPool(ServiceRegistryConfig serviceRegistryConfig) { - super(getHttpClientOptionsFromConfigurations(serviceRegistryConfig)); + super(serviceRegistryConfig); } @Override @@ -49,7 +49,8 @@ final class HttpClientPool extends AbstractClientPool { return false; } - static HttpClientOptions getHttpClientOptionsFromConfigurations(ServiceRegistryConfig serviceRegistryConfig) { + @Override + protected HttpClientOptions getHttpClientOptionsFromConfigurations(ServiceRegistryConfig serviceRegistryConfig) { HttpVersion ver = serviceRegistryConfig.getHttpVersion(); HttpClientOptions httpClientOptions = new HttpClientOptions(); httpClientOptions.setProtocolVersion(ver); @@ -61,7 +62,7 @@ final class HttpClientPool extends AbstractClientPool { proxy.setPort(serviceRegistryConfig.getProxyPort()); proxy.setUsername(serviceRegistryConfig.getProxyUsername()); proxy.setPassword( - Encryptions.decode(serviceRegistryConfig.getProxyPasswd(), ServiceRegistryConfig.PROXY_KEY)); + Encryptions.decode(serviceRegistryConfig.getProxyPasswd(), serviceRegistryConfig.getProxyConfigTag())); httpClientOptions.setProxyOptions(proxy); } if (ver == HttpVersion.HTTP_2) { @@ -70,7 +71,7 @@ final class HttpClientPool extends AbstractClientPool { } if (serviceRegistryConfig.isSsl()) { LOGGER.debug("service center client performs requests over TLS"); - VertxTLSBuilder.buildHttpClientOptions(ServiceRegistryConfig.SSL_KEY, httpClientOptions); + VertxTLSBuilder.buildHttpClientOptions(serviceRegistryConfig.getSslConfigTag(), httpClientOptions); } return httpClientOptions; } diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/WebsocketClientPool.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/WebsocketClientPool.java index 38c17be..96ab64f 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/WebsocketClientPool.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/WebsocketClientPool.java @@ -25,7 +25,7 @@ import org.slf4j.LoggerFactory; import io.vertx.core.http.HttpClientOptions; import io.vertx.core.http.HttpVersion; -public final class WebsocketClientPool extends AbstractClientPool { +public class WebsocketClientPool extends AbstractClientPool { private static final Logger LOGGER = LoggerFactory.getLogger(WebsocketClientPool.class); @@ -35,11 +35,11 @@ public final class WebsocketClientPool extends AbstractClientPool { public static final WebsocketClientPool INSTANCE = new WebsocketClientPool(); private WebsocketClientPool() { - super(getHttpClientOptionsFromConfigurations(ServiceRegistryConfig.INSTANCE)); + super(ServiceRegistryConfig.INSTANCE); } WebsocketClientPool(ServiceRegistryConfig serviceRegistryConfig) { - super(getHttpClientOptionsFromConfigurations(serviceRegistryConfig)); + super(serviceRegistryConfig); } @Override @@ -47,7 +47,8 @@ public final class WebsocketClientPool extends AbstractClientPool { return true; } - static HttpClientOptions getHttpClientOptionsFromConfigurations(ServiceRegistryConfig serviceRegistryConfig) { + @Override + protected HttpClientOptions getHttpClientOptionsFromConfigurations(ServiceRegistryConfig serviceRegistryConfig) { HttpVersion ver = serviceRegistryConfig.getHttpVersion(); HttpClientOptions httpClientOptions = new HttpClientOptions(); httpClientOptions.setProtocolVersion(ver); @@ -59,7 +60,7 @@ public final class WebsocketClientPool extends AbstractClientPool { } if (serviceRegistryConfig.isSsl()) { LOGGER.debug("service center ws client performs requests over TLS"); - VertxTLSBuilder.buildHttpClientOptions(ServiceRegistryConfig.SSL_KEY, httpClientOptions); + VertxTLSBuilder.buildHttpClientOptions(serviceRegistryConfig.getSslConfigTag(), httpClientOptions); } return httpClientOptions; } 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 d16d485..af1e5d7 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 @@ -19,10 +19,13 @@ package org.apache.servicecomb.serviceregistry.config; import java.util.ArrayList; import java.util.List; +import java.util.function.Function; import org.apache.servicecomb.foundation.auth.AuthHeaderProvider; import org.apache.servicecomb.foundation.common.net.IpPort; import org.apache.servicecomb.serviceregistry.ServiceRegistry; +import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient; +import org.apache.servicecomb.serviceregistry.client.http.ServiceRegistryClientImpl; import io.vertx.core.http.HttpVersion; @@ -141,8 +144,18 @@ public final class ServiceRegistryConfig { private String proxyPasswd; + private String sslConfigTag = SSL_KEY; + + private String proxyConfigTag = PROXY_KEY; + private List<AuthHeaderProvider> authHeaderProviders; + private Function<ServiceRegistry, ServiceRegistryClient> serviceRegistryClientConstructor = + serviceRegistry -> new ServiceRegistryClientImpl(this); + + public ServiceRegistryConfig() { + } + /** * Read the service registry related configurations and build the {@link ServiceRegistryConfig} * object. Since most of the service registry configurations are similar, this method may be @@ -417,6 +430,24 @@ public final class ServiceRegistryConfig { return this; } + public String getSslConfigTag() { + return sslConfigTag; + } + + public ServiceRegistryConfig setSslConfigTag(String sslConfigTag) { + this.sslConfigTag = sslConfigTag; + return this; + } + + public String getProxyConfigTag() { + return proxyConfigTag; + } + + public ServiceRegistryConfig setProxyConfigTag(String proxyConfigTag) { + this.proxyConfigTag = proxyConfigTag; + return this; + } + public List<AuthHeaderProvider> getAuthHeaderProviders() { return authHeaderProviders; } @@ -426,4 +457,14 @@ public final class ServiceRegistryConfig { this.authHeaderProviders = authHeaderProviders; return this; } + + public ServiceRegistryConfig setServiceRegistryClientConstructor( + Function<ServiceRegistry, ServiceRegistryClient> serviceRegistryClientConstructor) { + this.serviceRegistryClientConstructor = serviceRegistryClientConstructor; + return this; + } + + public ServiceRegistryClient createServiceRegistryClient(ServiceRegistry serviceRegistry) { + return this.serviceRegistryClientConstructor.apply(serviceRegistry); + } } diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/RemoteServiceRegistry.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/RemoteServiceRegistry.java index a53e4ac..d68a46e 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/RemoteServiceRegistry.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/RemoteServiceRegistry.java @@ -24,7 +24,6 @@ import java.util.concurrent.TimeUnit; import org.apache.servicecomb.foundation.common.concurrency.SuppressedRunnableWrapper; import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils; import org.apache.servicecomb.serviceregistry.client.ServiceRegistryClient; -import org.apache.servicecomb.serviceregistry.client.http.ServiceRegistryClientImpl; import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig; import org.apache.servicecomb.serviceregistry.definition.MicroserviceDefinition; import org.slf4j.Logger; @@ -68,7 +67,7 @@ public class RemoteServiceRegistry extends AbstractServiceRegistry { @Override protected ServiceRegistryClient createServiceRegistryClient() { - return new ServiceRegistryClientImpl(serviceRegistryConfig); + return serviceRegistryConfig.createServiceRegistryClient(this); } @Override diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestHttpClientPool.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestHttpClientPool.java index ba74331..4b57d61 100644 --- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestHttpClientPool.java +++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestHttpClientPool.java @@ -46,7 +46,11 @@ public class TestHttpClientPool { ArchaiusUtils.setProperty(ServiceRegistryConfig.PROXY_USERNAME, "user"); ArchaiusUtils.setProperty(ServiceRegistryConfig.PROXY_PASSWD, "pass"); - HttpClientOptions httpClientOptions = HttpClientPool.getHttpClientOptionsFromConfigurations( + HttpClientOptions httpClientOptions = new HttpClientPool(ServiceRegistryConfig.buildFromConfiguration()) { + @Override + public void create() { + } + }.getHttpClientOptionsFromConfigurations( ServiceRegistryConfig.buildFromConfiguration()); Assert.assertEquals( @@ -64,7 +68,11 @@ public class TestHttpClientPool { public void createHttpClientOptions_noProxy() { ArchaiusUtils.setProperty(ServiceRegistryConfig.PROXY_ENABLE, "false"); - HttpClientOptions httpClientOptions = HttpClientPool.getHttpClientOptionsFromConfigurations( + HttpClientOptions httpClientOptions = new HttpClientPool(ServiceRegistryConfig.buildFromConfiguration()) { + @Override + public void create() { + } + }.getHttpClientOptionsFromConfigurations( ServiceRegistryConfig.buildFromConfiguration()); Assert.assertNull(httpClientOptions.getProxyOptions()); @@ -74,7 +82,11 @@ public class TestHttpClientPool { public void createHttpClientOptions_http2() { ArchaiusUtils.setProperty("servicecomb.service.registry.client.httpVersion", HttpVersion.HTTP_2.name()); - HttpClientOptions httpClientOptions = HttpClientPool.getHttpClientOptionsFromConfigurations( + HttpClientOptions httpClientOptions = new HttpClientPool(ServiceRegistryConfig.buildFromConfiguration()) { + @Override + public void create() { + } + }.getHttpClientOptionsFromConfigurations( ServiceRegistryConfig.buildFromConfiguration()); Assert.assertEquals(HttpVersion.HTTP_2, httpClientOptions.getProtocolVersion()); @@ -83,7 +95,11 @@ public class TestHttpClientPool { @Test public void createHttpClientOptions_notHttp2() { - HttpClientOptions httpClientOptions = HttpClientPool.getHttpClientOptionsFromConfigurations( + HttpClientOptions httpClientOptions = new HttpClientPool(ServiceRegistryConfig.buildFromConfiguration()) { + @Override + public void create() { + } + }.getHttpClientOptionsFromConfigurations( ServiceRegistryConfig.buildFromConfiguration()); Assert.assertEquals(HttpVersion.HTTP_1_1, httpClientOptions.getProtocolVersion()); diff --git a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestWebsocketClientPool.java b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestWebsocketClientPool.java index 9ac4039..93c0453 100644 --- a/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestWebsocketClientPool.java +++ b/service-registry/src/test/java/org/apache/servicecomb/serviceregistry/client/http/TestWebsocketClientPool.java @@ -41,7 +41,11 @@ public class TestWebsocketClientPool { public void createHttpClientOptions_http2() { ArchaiusUtils.setProperty("servicecomb.service.registry.client.httpVersion", HttpVersion.HTTP_2.name()); - HttpClientOptions httpClientOptions = WebsocketClientPool.getHttpClientOptionsFromConfigurations( + HttpClientOptions httpClientOptions = new WebsocketClientPool(ServiceRegistryConfig.buildFromConfiguration()) { + @Override + public void create() { + } + }.getHttpClientOptionsFromConfigurations( ServiceRegistryConfig.buildFromConfiguration()); Assert.assertEquals(HttpVersion.HTTP_2, httpClientOptions.getProtocolVersion()); @@ -50,7 +54,11 @@ public class TestWebsocketClientPool { @Test public void createHttpClientOptions_notHttp2() { - HttpClientOptions httpClientOptions = WebsocketClientPool.getHttpClientOptionsFromConfigurations( + HttpClientOptions httpClientOptions = new WebsocketClientPool(ServiceRegistryConfig.buildFromConfiguration()) { + @Override + public void create() { + } + }.getHttpClientOptionsFromConfigurations( ServiceRegistryConfig.buildFromConfiguration()); Assert.assertEquals(HttpVersion.HTTP_1_1, httpClientOptions.getProtocolVersion());
