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 096a43b6a6412caf5836ecdb88fb2caf1c1e5c73 Author: yhs0092 <[email protected]> AuthorDate: Wed Jan 15 09:22:59 2020 +0800 [SCB-1691] add RestClientUtil for multiple ServiceRegistryClient instance situation the legacy RestUtils is preserved for compatibility and marked deprecated --- .../http/{RestUtils.java => RestClientUtil.java} | 51 +++++++++++++--------- .../serviceregistry/client/http/RestUtils.java | 5 +++ .../config/ServiceRegistryConfig.java | 14 ++++++ .../config/ServiceRegistryConfigBuilder.java | 9 +++- 4 files changed, 57 insertions(+), 22 deletions(-) diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RestUtils.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RestClientUtil.java similarity index 81% copy from service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RestUtils.java copy to service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RestClientUtil.java index 42d1e03..568ab57 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RestUtils.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RestClientUtil.java @@ -22,8 +22,8 @@ import java.net.URI; import java.net.URISyntaxException; import java.net.UnknownHostException; import java.util.HashMap; +import java.util.List; import java.util.Map; -import java.util.ServiceLoader; import org.apache.servicecomb.foundation.auth.AuthHeaderProvider; import org.apache.servicecomb.foundation.auth.SignRequest; @@ -40,8 +40,8 @@ import io.vertx.core.http.CaseInsensitiveHeaders; import io.vertx.core.http.HttpClientRequest; import io.vertx.core.http.HttpMethod; -final class RestUtils { - private static final Logger LOGGER = LoggerFactory.getLogger(RestUtils.class); +final class RestClientUtil { + private static final Logger LOGGER = LoggerFactory.getLogger(RestClientUtil.class); private static final String HEADER_CONTENT_TYPE = "Content-Type"; @@ -49,22 +49,31 @@ final class RestUtils { private static final String HEADER_TENANT_NAME = "x-domain-name"; - private static final ServiceLoader<AuthHeaderProvider> authHeaderProviders = - ServiceLoader.load(AuthHeaderProvider.class); + private List<AuthHeaderProvider> authHeaderProviders; - private RestUtils() { + private int requestTimeout; + + private String tenantName; + + private HttpClientPool httpClientPool; + + RestClientUtil(ServiceRegistryConfig serviceRegistryConfig) { + this.authHeaderProviders = serviceRegistryConfig.getAuthHeaderProviders(); + this.requestTimeout = serviceRegistryConfig.getRequestTimeout(); + this.tenantName = serviceRegistryConfig.getTenantName(); + this.httpClientPool = new HttpClientPool(serviceRegistryConfig); } - public static void httpDo(RequestContext requestContext, Handler<RestResponse> responseHandler) { + public void httpDo(RequestContext requestContext, Handler<RestResponse> responseHandler) { if (requestContext.getParams().getTimeout() != 0) { httpDo(requestContext.getParams().getTimeout(), requestContext, responseHandler); return; } - httpDo(ServiceRegistryConfig.INSTANCE.getRequestTimeout(), requestContext, responseHandler); + httpDo(requestTimeout, requestContext, responseHandler); } - public static void httpDo(long timeout, RequestContext requestContext, Handler<RestResponse> responseHandler) { - HttpClientWithContext vertxHttpClient = HttpClientPool.INSTANCE.getClient(); + public void httpDo(long timeout, RequestContext requestContext, Handler<RestResponse> responseHandler) { + HttpClientWithContext vertxHttpClient = httpClientPool.getClient(); vertxHttpClient.runOnContext(httpClient -> { IpPort ipPort = requestContext.getIpPort(); HttpMethod httpMethod = requestContext.getMethod(); @@ -146,7 +155,7 @@ final class RestUtils { }); } - public static RequestContext createRequestContext(HttpMethod method, IpPort ipPort, String uri, + public RequestContext createRequestContext(HttpMethod method, IpPort ipPort, String uri, RequestParam requestParam) { RequestContext requestContext = new RequestContext(); requestContext.setMethod(method); @@ -156,7 +165,7 @@ final class RestUtils { return requestContext; } - public static SignRequest createSignRequest(String method, IpPort ipPort, RequestParam requestParam, String url, + public SignRequest createSignRequest(String method, IpPort ipPort, RequestParam requestParam, String url, Map<String, String> headers) { SignRequest signReq = new SignRequest(); StringBuilder endpoint = new StringBuilder("https://" + ipPort.getHostOrIp()); @@ -176,44 +185,44 @@ final class RestUtils { return signReq; } - public static void addDefaultHeaders(HttpClientRequest request) { + public void addDefaultHeaders(HttpClientRequest request) { request.headers().addAll(getDefaultHeaders()); } - private static Map<String, String> defaultHeaders() { + private Map<String, String> defaultHeaders() { Map<String, String> headers = new HashMap<>(); headers.put(HEADER_CONTENT_TYPE, "application/json"); headers.put(HEADER_USER_AGENT, "cse-serviceregistry-client/1.0.0"); - headers.put(HEADER_TENANT_NAME, ServiceRegistryConfig.INSTANCE.getTenantName()); + headers.put(HEADER_TENANT_NAME, tenantName); return headers; } - public static MultiMap getDefaultHeaders() { + public MultiMap getDefaultHeaders() { return new CaseInsensitiveHeaders().addAll(defaultHeaders()); } - public static void get(IpPort ipPort, String uri, RequestParam requestParam, + public void get(IpPort ipPort, String uri, RequestParam requestParam, Handler<RestResponse> responseHandler) { httpDo(createRequestContext(HttpMethod.GET, ipPort, uri, requestParam), responseHandler); } - public static void post(IpPort ipPort, String uri, RequestParam requestParam, + public void post(IpPort ipPort, String uri, RequestParam requestParam, Handler<RestResponse> responseHandler) { httpDo(createRequestContext(HttpMethod.POST, ipPort, uri, requestParam), responseHandler); } - public static void put(IpPort ipPort, String uri, RequestParam requestParam, + public void put(IpPort ipPort, String uri, RequestParam requestParam, Handler<RestResponse> responseHandler) { httpDo(createRequestContext(HttpMethod.PUT, ipPort, uri, requestParam), responseHandler); } - public static void delete(IpPort ipPort, String uri, RequestParam requestParam, + public void delete(IpPort ipPort, String uri, RequestParam requestParam, Handler<RestResponse> responseHandler) { httpDo(createRequestContext(HttpMethod.DELETE, ipPort, uri, requestParam), responseHandler); } - public static Map<String, String> getSignAuthHeaders(SignRequest signReq) { + public Map<String, String> getSignAuthHeaders(SignRequest signReq) { Map<String, String> headers = new HashMap<>(); authHeaderProviders.forEach(provider -> headers.putAll(provider.getSignAuthHeaders(signReq))); return headers; diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RestUtils.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RestUtils.java index 42d1e03..b902611 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RestUtils.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/client/http/RestUtils.java @@ -40,6 +40,11 @@ import io.vertx.core.http.CaseInsensitiveHeaders; import io.vertx.core.http.HttpClientRequest; import io.vertx.core.http.HttpMethod; +/** + * This class is designed following singleton pattern, but it's not suitable for multi sc cluster occasion. + * @deprecated consider to use {@link RestClientUtil} instead. + */ +@Deprecated final class RestUtils { private static final Logger LOGGER = LoggerFactory.getLogger(RestUtils.class); 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 1596077..d16d485 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 @@ -18,7 +18,9 @@ package org.apache.servicecomb.serviceregistry.config; import java.util.ArrayList; +import java.util.List; +import org.apache.servicecomb.foundation.auth.AuthHeaderProvider; import org.apache.servicecomb.foundation.common.net.IpPort; import org.apache.servicecomb.serviceregistry.ServiceRegistry; @@ -139,6 +141,8 @@ public final class ServiceRegistryConfig { private String proxyPasswd; + private List<AuthHeaderProvider> authHeaderProviders; + /** * 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 @@ -412,4 +416,14 @@ public final class ServiceRegistryConfig { this.proxyPasswd = proxyPasswd; return this; } + + public List<AuthHeaderProvider> getAuthHeaderProviders() { + return authHeaderProviders; + } + + public ServiceRegistryConfig setAuthHeaderProviders( + List<AuthHeaderProvider> authHeaderProviders) { + this.authHeaderProviders = authHeaderProviders; + return this; + } } diff --git a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/config/ServiceRegistryConfigBuilder.java b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/config/ServiceRegistryConfigBuilder.java index 95f2b6c..1651532 100644 --- a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/config/ServiceRegistryConfigBuilder.java +++ b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/config/ServiceRegistryConfigBuilder.java @@ -25,8 +25,10 @@ import java.util.Objects; import org.apache.servicecomb.config.ConfigUtil; import org.apache.servicecomb.deployment.Deployment; import org.apache.servicecomb.deployment.DeploymentProvider; +import org.apache.servicecomb.foundation.auth.AuthHeaderProvider; import org.apache.servicecomb.foundation.common.net.IpPort; import org.apache.servicecomb.foundation.common.net.NetUtils; +import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,7 +78,8 @@ class ServiceRegistryConfigBuilder { .setProxyHost(getProxyHost()) .setProxyPort(getProxyPort()) .setProxyUsername(getProxyUsername()) - .setProxyPasswd(getProxyPasswd()); + .setProxyPasswd(getProxyPasswd()) + .setAuthHeaderProviders(getAuthHeaderProviders()); } public HttpVersion getHttpVersion() { @@ -292,6 +295,10 @@ class ServiceRegistryConfigBuilder { return getProperty(null, ServiceRegistryConfig.PROXY_PASSWD); } + public List<AuthHeaderProvider> getAuthHeaderProviders() { + return SPIServiceUtils.getAllService(AuthHeaderProvider.class); + } + private String getProperty(String defaultValue, String... keys) { String property = null; for (String key : keys) {
