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 a407a983435b4747fc5df8862c1adf1fe6592fa0 Author: yhs0092 <[email protected]> AuthorDate: Tue Jan 14 16:27:11 2020 +0800 [SCB-1691] ClientPool can be instantiated --- .../client/http/AbstractClientPool.java | 34 ++++++++++++---------- .../serviceregistry/client/http/ClientPool.java | 6 +--- .../client/http/HttpClientPool.java | 32 ++++++++++++-------- .../client/http/WebsocketClientPool.java | 16 ++++++---- .../client/http/TestHttpClientPool.java | 12 +++++--- .../client/http/TestWebsocketClientPool.java | 7 +++-- 6 files changed, 63 insertions(+), 44 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 5992c05..968d858 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,9 +17,6 @@ package org.apache.servicecomb.serviceregistry.client.http; -import com.netflix.config.DynamicIntProperty; -import com.netflix.config.DynamicPropertyFactory; - import org.apache.servicecomb.foundation.vertx.AddressResolverConfig; import org.apache.servicecomb.foundation.vertx.VertxUtils; import org.apache.servicecomb.foundation.vertx.client.ClientPoolManager; @@ -30,6 +27,9 @@ import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.netflix.config.DynamicIntProperty; +import com.netflix.config.DynamicPropertyFactory; + import io.vertx.core.DeploymentOptions; import io.vertx.core.Vertx; import io.vertx.core.VertxOptions; @@ -38,12 +38,15 @@ import io.vertx.core.http.HttpClientOptions; /** * Created by on 2017/4/28. */ -public abstract class AbstractClientPool implements ClientPool { +abstract class AbstractClientPool implements ClientPool { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractClientPool.class); - private ClientPoolManager<HttpClientWithContext> clientMgr; + private HttpClientOptions httpClientOptions; + + private ClientPoolManager<HttpClientWithContext> clientMgr; - public AbstractClientPool() { + AbstractClientPool(HttpClientOptions httpClientOptions) { + this.httpClientOptions = httpClientOptions; create(); } @@ -54,22 +57,23 @@ public abstract class AbstractClientPool implements ClientPool { } public void create() { - DynamicIntProperty property = DynamicPropertyFactory.getInstance().getIntProperty(ServiceRegistryConfig.EVENT_LOOP_POOL_SIZE, 4); - DynamicIntProperty workerPoolSize = DynamicPropertyFactory.getInstance().getIntProperty(ServiceRegistryConfig.WORKER_POOL_SIZE, 4); + DynamicIntProperty property = DynamicPropertyFactory.getInstance() + .getIntProperty(ServiceRegistryConfig.EVENT_LOOP_POOL_SIZE, 4); + DynamicIntProperty workerPoolSize = DynamicPropertyFactory.getInstance() + .getIntProperty(ServiceRegistryConfig.WORKER_POOL_SIZE, 4); // 这里面是同步接口,且好像直接在事件线程中用,保险起见,先使用独立的vertx实例 VertxOptions vertxOptions = new VertxOptions() - .setAddressResolverOptions(AddressResolverConfig.getAddressResover(ServiceRegistryConfig.SSL_KEY)) - .setEventLoopPoolSize(property.get()); + .setAddressResolverOptions(AddressResolverConfig.getAddressResover(ServiceRegistryConfig.SSL_KEY)) + .setEventLoopPoolSize(property.get()); Vertx vertx = VertxUtils.getOrCreateVertxByName("registry", vertxOptions); - HttpClientOptions httpClientOptions = createHttpClientOptions(); clientMgr = new ClientPoolManager<>(vertx, new HttpClientPoolFactory(httpClientOptions)); DeploymentOptions deployOptions = VertxUtils.createClientDeployOptions(this.clientMgr, - ServiceRegistryConfig.INSTANCE.getInstances()) - .setWorker(isWorker()) - .setWorkerPoolName(ServiceRegistryConfig.WORKER_POOL_NAME) - .setWorkerPoolSize(workerPoolSize.get()); + ServiceRegistryConfig.INSTANCE.getInstances()) + .setWorker(isWorker()) + .setWorkerPoolName(ServiceRegistryConfig.WORKER_POOL_NAME) + .setWorkerPoolSize(workerPoolSize.get()); try { VertxUtils.blockDeploy(vertx, ClientVerticle.class, deployOptions); } catch (InterruptedException e) { diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ClientPool.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ClientPool.java index e5db559..3784d98 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ClientPool.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/ClientPool.java @@ -19,15 +19,11 @@ package org.apache.servicecomb.serviceregistry.client.http; import org.apache.servicecomb.foundation.vertx.client.http.HttpClientWithContext; -import io.vertx.core.http.HttpClientOptions; - /** * Created by on 2017/4/28. */ -public interface ClientPool { +interface ClientPool { void create(); - HttpClientOptions createHttpClientOptions(); - HttpClientWithContext getClient(); } 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 a313669..46ca5ef 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 @@ -30,13 +30,21 @@ import io.vertx.core.net.ProxyOptions; /** * Created by on 2017/4/28. */ -public final class HttpClientPool extends AbstractClientPool { +final class HttpClientPool extends AbstractClientPool { private static final Logger LOGGER = LoggerFactory.getLogger(HttpClientPool.class); + /** + * The default instance, for default sc cluster. + */ public static final HttpClientPool INSTANCE = new HttpClientPool(); private HttpClientPool() { + super(getHttpClientOptionsFromConfigurations(ServiceRegistryConfig.INSTANCE)); + } + + HttpClientPool(ServiceRegistryConfig serviceRegistryConfig) { + super(getHttpClientOptionsFromConfigurations(serviceRegistryConfig)); } @Override @@ -44,26 +52,26 @@ public final class HttpClientPool extends AbstractClientPool { return false; } - @Override - public HttpClientOptions createHttpClientOptions() { - HttpVersion ver = ServiceRegistryConfig.INSTANCE.getHttpVersion(); + static HttpClientOptions getHttpClientOptionsFromConfigurations(ServiceRegistryConfig serviceRegistryConfig) { + HttpVersion ver = serviceRegistryConfig.getHttpVersion(); HttpClientOptions httpClientOptions = new HttpClientOptions(); httpClientOptions.setProtocolVersion(ver); - httpClientOptions.setConnectTimeout(ServiceRegistryConfig.INSTANCE.getConnectionTimeout()); - httpClientOptions.setIdleTimeout(ServiceRegistryConfig.INSTANCE.getIdleConnectionTimeout()); - if (ServiceRegistryConfig.INSTANCE.isProxyEnable()) { + httpClientOptions.setConnectTimeout(serviceRegistryConfig.getConnectionTimeout()); + httpClientOptions.setIdleTimeout(serviceRegistryConfig.getIdleConnectionTimeout()); + if (serviceRegistryConfig.isProxyEnable()) { ProxyOptions proxy = new ProxyOptions(); - proxy.setHost(ServiceRegistryConfig.INSTANCE.getProxyHost()); - proxy.setPort(ServiceRegistryConfig.INSTANCE.getProxyPort()); - proxy.setUsername(ServiceRegistryConfig.INSTANCE.getProxyUsername()); - proxy.setPassword(Encryptions.decode(ServiceRegistryConfig.INSTANCE.getProxyPasswd(), ServiceRegistryConfig.PROXY_KEY)); + proxy.setHost(serviceRegistryConfig.getProxyHost()); + proxy.setPort(serviceRegistryConfig.getProxyPort()); + proxy.setUsername(serviceRegistryConfig.getProxyUsername()); + proxy.setPassword( + Encryptions.decode(serviceRegistryConfig.getProxyPasswd(), ServiceRegistryConfig.PROXY_KEY)); httpClientOptions.setProxyOptions(proxy); } if (ver == HttpVersion.HTTP_2) { LOGGER.debug("service center client protocol version is HTTP/2"); httpClientOptions.setHttp2ClearTextUpgrade(false); } - if (ServiceRegistryConfig.INSTANCE.isSsl()) { + if (serviceRegistryConfig.isSsl()) { LOGGER.debug("service center client performs requests over TLS"); VertxTLSBuilder.buildHttpClientOptions(ServiceRegistryConfig.SSL_KEY, 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 2c96f5b..802867a 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 @@ -35,6 +35,11 @@ public final class WebsocketClientPool extends AbstractClientPool { public static final WebsocketClientPool INSTANCE = new WebsocketClientPool(); private WebsocketClientPool() { + super(getHttpClientOptionsFromConfigurations(ServiceRegistryConfig.INSTANCE)); + } + + WebsocketClientPool(ServiceRegistryConfig serviceRegistryConfig) { + super(getHttpClientOptionsFromConfigurations(serviceRegistryConfig)); } @Override @@ -42,18 +47,17 @@ public final class WebsocketClientPool extends AbstractClientPool { return true; } - @Override - public HttpClientOptions createHttpClientOptions() { - HttpVersion ver = ServiceRegistryConfig.INSTANCE.getHttpVersion(); + static HttpClientOptions getHttpClientOptionsFromConfigurations(ServiceRegistryConfig serviceRegistryConfig) { + HttpVersion ver = serviceRegistryConfig.getHttpVersion(); HttpClientOptions httpClientOptions = new HttpClientOptions(); httpClientOptions.setProtocolVersion(ver); - httpClientOptions.setConnectTimeout(ServiceRegistryConfig.INSTANCE.getConnectionTimeout()); - httpClientOptions.setIdleTimeout(ServiceRegistryConfig.INSTANCE.getIdleWatchTimeout()); + httpClientOptions.setConnectTimeout(serviceRegistryConfig.getConnectionTimeout()); + httpClientOptions.setIdleTimeout(serviceRegistryConfig.getIdleWatchTimeout()); if (ver == HttpVersion.HTTP_2) { LOGGER.debug("service center ws client protocol version is HTTP/2"); httpClientOptions.setHttp2ClearTextUpgrade(false); } - if (ServiceRegistryConfig.INSTANCE.isSsl()) { + if (serviceRegistryConfig.isSsl()) { LOGGER.debug("service center ws client performs requests over TLS"); VertxTLSBuilder.buildHttpClientOptions(ServiceRegistryConfig.SSL_KEY, httpClientOptions); } 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 1947141..ba74331 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,8 @@ public class TestHttpClientPool { ArchaiusUtils.setProperty(ServiceRegistryConfig.PROXY_USERNAME, "user"); ArchaiusUtils.setProperty(ServiceRegistryConfig.PROXY_PASSWD, "pass"); - HttpClientOptions httpClientOptions = HttpClientPool.INSTANCE.createHttpClientOptions(); + HttpClientOptions httpClientOptions = HttpClientPool.getHttpClientOptionsFromConfigurations( + ServiceRegistryConfig.buildFromConfiguration()); Assert.assertEquals( "{" @@ -63,7 +64,8 @@ public class TestHttpClientPool { public void createHttpClientOptions_noProxy() { ArchaiusUtils.setProperty(ServiceRegistryConfig.PROXY_ENABLE, "false"); - HttpClientOptions httpClientOptions = HttpClientPool.INSTANCE.createHttpClientOptions(); + HttpClientOptions httpClientOptions = HttpClientPool.getHttpClientOptionsFromConfigurations( + ServiceRegistryConfig.buildFromConfiguration()); Assert.assertNull(httpClientOptions.getProxyOptions()); } @@ -72,7 +74,8 @@ public class TestHttpClientPool { public void createHttpClientOptions_http2() { ArchaiusUtils.setProperty("servicecomb.service.registry.client.httpVersion", HttpVersion.HTTP_2.name()); - HttpClientOptions httpClientOptions = HttpClientPool.INSTANCE.createHttpClientOptions(); + HttpClientOptions httpClientOptions = HttpClientPool.getHttpClientOptionsFromConfigurations( + ServiceRegistryConfig.buildFromConfiguration()); Assert.assertEquals(HttpVersion.HTTP_2, httpClientOptions.getProtocolVersion()); Assert.assertFalse(httpClientOptions.isHttp2ClearTextUpgrade()); @@ -80,7 +83,8 @@ public class TestHttpClientPool { @Test public void createHttpClientOptions_notHttp2() { - HttpClientOptions httpClientOptions = HttpClientPool.INSTANCE.createHttpClientOptions(); + HttpClientOptions httpClientOptions = HttpClientPool.getHttpClientOptionsFromConfigurations( + ServiceRegistryConfig.buildFromConfiguration()); Assert.assertEquals(HttpVersion.HTTP_1_1, httpClientOptions.getProtocolVersion()); Assert.assertTrue(httpClientOptions.isHttp2ClearTextUpgrade()); 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 1badce3..9ac4039 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 @@ -17,6 +17,7 @@ package org.apache.servicecomb.serviceregistry.client.http; import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils; +import org.apache.servicecomb.serviceregistry.config.ServiceRegistryConfig; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -40,7 +41,8 @@ public class TestWebsocketClientPool { public void createHttpClientOptions_http2() { ArchaiusUtils.setProperty("servicecomb.service.registry.client.httpVersion", HttpVersion.HTTP_2.name()); - HttpClientOptions httpClientOptions = WebsocketClientPool.INSTANCE.createHttpClientOptions(); + HttpClientOptions httpClientOptions = WebsocketClientPool.getHttpClientOptionsFromConfigurations( + ServiceRegistryConfig.buildFromConfiguration()); Assert.assertEquals(HttpVersion.HTTP_2, httpClientOptions.getProtocolVersion()); Assert.assertFalse(httpClientOptions.isHttp2ClearTextUpgrade()); @@ -48,7 +50,8 @@ public class TestWebsocketClientPool { @Test public void createHttpClientOptions_notHttp2() { - HttpClientOptions httpClientOptions = WebsocketClientPool.INSTANCE.createHttpClientOptions(); + HttpClientOptions httpClientOptions = WebsocketClientPool.getHttpClientOptionsFromConfigurations( + ServiceRegistryConfig.buildFromConfiguration()); Assert.assertEquals(HttpVersion.HTTP_1_1, httpClientOptions.getProtocolVersion()); Assert.assertTrue(httpClientOptions.isHttp2ClearTextUpgrade());
