You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ya...@apache.org on 2020/03/09 16:15:05 UTC
[servicecomb-java-chassis] 16/19: [SCB-1691] support multiple TLS
enabled sc clusters
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 <yh...@163.com>
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());