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 1e16ca4d5a151e126b6071dcdd1e8d75669573cd Author: Liuhuaizhou <[email protected]> AuthorDate: Tue Aug 20 14:45:45 2019 +0800 [SCB-1450] Change Registry WebsocketClient work module to a worker verticle,So it can support blocking-task,like Service Center watching task. --- .../client/http/AbstractClientPool.java | 27 ++++++++++++++++++---- .../client/http/HttpClientPool.java | 5 ++++ .../client/http/WebsocketClientPool.java | 5 ++++ 3 files changed, 32 insertions(+), 5 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 a631b96..846fea8 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,9 @@ 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; @@ -42,27 +45,41 @@ public abstract class AbstractClientPool implements ClientPool { public static final String PROXY_KEY = "sc.consumer"; + private static final String EVENT_LOOP_POOL_SIZE = "servicecomb.service.registry.client.eventLoopPoolSize"; + + private static final String WORKER_POOL_SIZE = "servicecomb.service.registry.client.workerPoolSize"; + + private static final String WORKER_POOL_NAME = "registry-vert.x-worker-thread"; + private ClientPoolManager<HttpClientWithContext> clientMgr; public AbstractClientPool() { create(); } + protected abstract boolean isWorker(); + public HttpClientWithContext getClient() { return this.clientMgr.findThreadBindClientPool(); } public void create() { + DynamicIntProperty property = DynamicPropertyFactory.getInstance().getIntProperty(EVENT_LOOP_POOL_SIZE, 4); + DynamicIntProperty workerPoolSize = DynamicPropertyFactory.getInstance().getIntProperty(WORKER_POOL_SIZE, 4); + // 这里面是同步接口,且好像直接在事件线程中用,保险起见,先使用独立的vertx实例 - VertxOptions vertxOptions = new VertxOptions(); - vertxOptions.setAddressResolverOptions(AddressResolverConfig.getAddressResover(SSL_KEY)); + VertxOptions vertxOptions = new VertxOptions() + .setAddressResolverOptions(AddressResolverConfig.getAddressResover(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.getWorkerPoolSize()); + DeploymentOptions deployOptions = VertxUtils.createClientDeployOptions(this.clientMgr, + ServiceRegistryConfig.INSTANCE.getInstances()) + .setWorker(isWorker()) + .setWorkerPoolName(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/HttpClientPool.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/HttpClientPool.java index efbee4c..71b400b 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 @@ -40,6 +40,11 @@ public final class HttpClientPool extends AbstractClientPool { } @Override + protected boolean isWorker() { + return false; + } + + @Override public HttpClientOptions createHttpClientOptions() { HttpVersion ver = ServiceRegistryConfig.INSTANCE.getHttpVersion(); HttpClientOptions httpClientOptions = new 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 a8b14ab..3242043 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 @@ -38,6 +38,11 @@ public final class WebsocketClientPool extends AbstractClientPool { } @Override + protected boolean isWorker() { + return true; + } + + @Override public HttpClientOptions createHttpClientOptions() { HttpVersion ver = ServiceRegistryConfig.INSTANCE.getHttpVersion(); HttpClientOptions httpClientOptions = new HttpClientOptions();
