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:55 UTC
[servicecomb-java-chassis] 06/19: [SCB-1691] add RestClientUtil for
multiple ServiceRegistryClient instance situation
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 <yh...@163.com>
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) {