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:14:54 UTC
[servicecomb-java-chassis] 05/19: [SCB-1691] ClientPool can be
instantiated
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 <yh...@163.com>
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());