diff --git a/api/src/main/java/com/alibaba/nacos/api/naming/utils/NamingUtils.java b/api/src/main/java/com/alibaba/nacos/api/naming/utils/NamingUtils.java index 911219ae30e..9faa8b40bf9 100644 --- a/api/src/main/java/com/alibaba/nacos/api/naming/utils/NamingUtils.java +++ b/api/src/main/java/com/alibaba/nacos/api/naming/utils/NamingUtils.java @@ -28,6 +28,9 @@ public class NamingUtils { public static String getGroupedName(final String serviceName, final String groupName) { + if (StringUtils.isBlank(serviceName)) { + throw new IllegalArgumentException("Param 'serviceName' is illegal, serviceName is blank"); + } final String resultGroupedName = groupName + Constants.SERVICE_INFO_SPLITER + serviceName; return resultGroupedName.intern(); } diff --git a/auth/pom.xml b/auth/pom.xml index a048b81cfe5..afd43988bed 100644 --- a/auth/pom.xml +++ b/auth/pom.xml @@ -40,6 +40,10 @@ ${project.groupId} nacos-common + + ${project.groupId} + nacos-sys + org.springframework.boot diff --git a/auth/src/main/java/com/alibaba/nacos/auth/common/AuthConfigs.java b/auth/src/main/java/com/alibaba/nacos/auth/common/AuthConfigs.java index 19638654be0..721359b3608 100644 --- a/auth/src/main/java/com/alibaba/nacos/auth/common/AuthConfigs.java +++ b/auth/src/main/java/com/alibaba/nacos/auth/common/AuthConfigs.java @@ -16,12 +16,11 @@ package com.alibaba.nacos.auth.common; -import com.alibaba.nacos.auth.common.env.ReloadableConfigs; import com.alibaba.nacos.common.JustForTest; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import io.jsonwebtoken.io.Decoders; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; @@ -40,9 +39,6 @@ public class AuthConfigs { @JustForTest private static Boolean cachingEnabled = null; - @Autowired - private ReloadableConfigs reloadableConfigs; - /** * secret key. */ @@ -93,7 +89,7 @@ public boolean isAuthEnabled() { return BooleanUtils.toBoolean(enabled); } return BooleanUtils - .toBoolean(reloadableConfigs.getProperties().getProperty("nacos.core.auth.enabled", "false")); + .toBoolean(ApplicationUtils.getProperty("nacos.core.auth.enabled", "false")); } /** @@ -106,7 +102,7 @@ public boolean isCachingEnabled() { return cachingEnabled; } return BooleanUtils - .toBoolean(reloadableConfigs.getProperties().getProperty("nacos.core.auth.caching.enabled", "true")); + .toBoolean(ApplicationUtils.getProperty("nacos.core.auth.caching.enabled", "true")); } @JustForTest diff --git a/auth/src/main/java/com/alibaba/nacos/auth/common/env/ReloadableConfigs.java b/auth/src/main/java/com/alibaba/nacos/auth/common/env/ReloadableConfigs.java deleted file mode 100644 index 6984ad52e7f..00000000000 --- a/auth/src/main/java/com/alibaba/nacos/auth/common/env/ReloadableConfigs.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 1999-2018 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.alibaba.nacos.auth.common.env; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; - -/** - * Reload application.properties. - * - * @author nkorange - * @author mai.jh - * @since 1.2.0 - */ -@Component -public class ReloadableConfigs { - - private static final String FILE_PREFIX = "file:"; - - private Properties properties; - - @Value("${spring.config.location:}") - private String path; - - /** - * Periodically load configuration file information. - * - * @throws IOException IOException - */ - @Scheduled(fixedRate = 5000) - public void reload() throws IOException { - final Properties properties = new Properties(); - InputStream inputStream = null; - if (StringUtils.isNotBlank(path) && path.contains(FILE_PREFIX)) { - String[] paths = path.split(","); - path = paths[paths.length - 1].substring(FILE_PREFIX.length()); - } - try { - inputStream = new FileInputStream(new File(path + "application.properties")); - } catch (Exception ignore) { - } - if (inputStream == null) { - inputStream = getClass().getResourceAsStream("/application.properties"); - } - properties.load(inputStream); - inputStream.close(); - this.properties = properties; - } - - public final Properties getProperties() { - return properties; - } -} diff --git a/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java b/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java index fab00f032c5..93578dda94c 100644 --- a/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java +++ b/client/src/main/java/com/alibaba/nacos/client/config/impl/ClientWorker.java @@ -32,7 +32,6 @@ import com.alibaba.nacos.client.utils.TenantUtil; import com.alibaba.nacos.common.http.HttpRestResult; import com.alibaba.nacos.common.lifecycle.Closeable; -import com.alibaba.nacos.common.utils.ConcurrentHashSet; import com.alibaba.nacos.common.utils.ConvertUtils; import com.alibaba.nacos.common.utils.MD5Utils; import com.alibaba.nacos.common.utils.StringUtils; @@ -166,7 +165,6 @@ private void removeCache(String dataId, String group) { copy.remove(groupKey); cacheMap.set(copy); } - reMakeCacheDataTaskId(); LOGGER.info("[{}] [unsubscribe] {}", this.agent.getName(), groupKey); MetricsMonitor.getListenConfigCountMonitor().set(cacheMap.get().size()); @@ -179,38 +177,11 @@ void removeCache(String dataId, String group, String tenant) { copy.remove(groupKey); cacheMap.set(copy); } - reMakeCacheDataTaskId(); LOGGER.info("[{}] [unsubscribe] {}", agent.getName(), groupKey); MetricsMonitor.getListenConfigCountMonitor().set(cacheMap.get().size()); } - /** - * Remake cacheData taskId. - */ - private void reMakeCacheDataTaskId() { - int listenerSize = cacheMap.get().size(); - int remakeTaskId = (int) Math.ceil(listenerSize / ParamUtil.getPerTaskConfigSize()); - if (remakeTaskId < (int) currentLongingTaskCount) { - for (int i = 0; i < remakeTaskId; i++) { - int count = 0; - for (String key : cacheMap.get().keySet()) { - if (count == ParamUtil.getPerTaskConfigSize()) { - break; - } - CacheData cacheData = cacheMap.get().get(key); - cacheData.setTaskId(i); - synchronized (cacheMap) { - Map copy = new HashMap(this.cacheMap.get()); - copy.put(key, cacheData); - cacheMap.set(copy); - } - count++; - } - } - } - } - /** * Add cache data if absent. * @@ -277,8 +248,6 @@ public CacheData addCacheDataIfAbsent(String dataId, String group, String tenant cache.setInitializing(true); } else { cache = new CacheData(configFilterChainManager, agent.getName(), dataId, group, tenant); - int taskId = cacheMap.get().size() / (int) ParamUtil.getPerTaskConfigSize(); - cache.setTaskId(taskId); // fix issue # 1317 if (enableRemoteSyncConfig) { String[] ct = getServerConfig(dataId, group, tenant, 3000L); @@ -425,16 +394,11 @@ public void checkConfigInfo() { int longingTaskCount = (int) Math.ceil(listenerSize / ParamUtil.getPerTaskConfigSize()); if (longingTaskCount > currentLongingTaskCount) { for (int i = (int) currentLongingTaskCount; i < longingTaskCount; i++) { - taskIdSet.add(i); // The task list is no order.So it maybe has issues when changing. executorService.execute(new LongPollingRunnable(i)); } - } else if (longingTaskCount < currentLongingTaskCount) { - for (int i = longingTaskCount; i < (int) currentLongingTaskCount; i++) { - taskIdSet.remove(i); - } + currentLongingTaskCount = longingTaskCount; } - currentLongingTaskCount = longingTaskCount; } /** @@ -692,9 +656,7 @@ public void run() { } inInitializingCacheList.clear(); - if (taskIdSet.contains(taskId)) { - executorService.execute(this); - } + executorService.execute(this); } catch (Throwable e) { @@ -723,11 +685,6 @@ private void setHealthServer(boolean isHealthServer) { private final AtomicReference> cacheMap = new AtomicReference>( new HashMap()); - /** - * Store the running taskId. - */ - private final ConcurrentHashSet taskIdSet = new ConcurrentHashSet(); - private final HttpAgent agent; private final ConfigFilterChainManager configFilterChainManager; diff --git a/client/src/test/java/com/alibaba/nacos/client/config/listener/impl/ClientWorkerTest.java b/client/src/test/java/com/alibaba/nacos/client/config/listener/impl/ClientWorkerTest.java deleted file mode 100644 index 7922124189e..00000000000 --- a/client/src/test/java/com/alibaba/nacos/client/config/listener/impl/ClientWorkerTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 1999-2018 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.alibaba.nacos.client.config.listener.impl; - -import com.alibaba.nacos.api.config.listener.Listener; -import com.alibaba.nacos.api.exception.NacosException; -import com.alibaba.nacos.client.config.filter.impl.ConfigFilterChainManager; -import com.alibaba.nacos.client.config.http.MetricsHttpAgent; -import com.alibaba.nacos.client.config.impl.ClientWorker; -import com.alibaba.nacos.client.utils.ParamUtil; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.Arrays; -import java.util.List; -import java.util.Properties; -import java.util.concurrent.Executor; -import java.util.concurrent.ScheduledExecutorService; - -import static org.mockito.Mockito.mock; - -public class ClientWorkerTest { - - @Mock - ScheduledExecutorService scheduledExecutorService; - - private ClientWorker clientWorker; - - private List listeners; - - private final String dataId = "data"; - - private final String group = "group"; - - private final String currentLongingTaskCount = "currentLongingTaskCount"; - - @Before - public void init() { - MockitoAnnotations.initMocks(this); - clientWorker = new ClientWorker(mock(MetricsHttpAgent.class), mock(ConfigFilterChainManager.class), - mock(Properties.class)); - try { - Field executorServiceField = clientWorker.getClass().getDeclaredField("executorService"); - executorServiceField.setAccessible(true); - Field modifiersField = Field.class.getDeclaredField("modifiers"); - modifiersField.setAccessible(true); - modifiersField.setInt(executorServiceField, executorServiceField.getModifiers() & ~Modifier.FINAL); - executorServiceField.set(clientWorker, scheduledExecutorService); - Listener listener = new Listener() { - @Override - public Executor getExecutor() { - return null; - } - - @Override - public void receiveConfigInfo(String configInfo) { - - } - }; - listeners = Arrays.asList(listener); - } catch (NoSuchFieldException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - - @Test - public void testAddLongPollNumberThreads() { - try { - for (int i = 0; i < ParamUtil.getPerTaskConfigSize(); i++) { - clientWorker.addTenantListeners(dataId + i, group, listeners); - } - Field currentLongingTaskCountField = clientWorker.getClass().getDeclaredField(currentLongingTaskCount); - currentLongingTaskCountField.setAccessible(true); - Assert.assertEquals(currentLongingTaskCount, (int) currentLongingTaskCountField.getDouble(clientWorker), 1); - for (int i = (int) ParamUtil.getPerTaskConfigSize(); i < ParamUtil.getPerTaskConfigSize() * 2; i++) { - clientWorker.addTenantListeners(dataId + i, group, listeners); - } - Assert.assertEquals(currentLongingTaskCount, (int) currentLongingTaskCountField.getDouble(clientWorker), 2); - } catch (NacosException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (NoSuchFieldException e) { - e.printStackTrace(); - } - } - - @Test - public void testReduceLongPollNumberThreads() { - try { - for (int i = 0; i < ParamUtil.getPerTaskConfigSize() * 3; i++) { - clientWorker.addTenantListeners(dataId + i, group, listeners); - } - Field currentLongingTaskCountField = clientWorker.getClass().getDeclaredField(currentLongingTaskCount); - currentLongingTaskCountField.setAccessible(true); - Assert.assertEquals(currentLongingTaskCount, (int) currentLongingTaskCountField.getDouble(clientWorker), 3); - - for (int i = (int) ParamUtil.getPerTaskConfigSize(); i < ParamUtil.getPerTaskConfigSize() * 2; i++) { - clientWorker.removeTenantListener(dataId + i, group, listeners.get(0)); - } - Assert.assertEquals(currentLongingTaskCount, (int) currentLongingTaskCountField.getDouble(clientWorker), 2); - } catch (NacosException e) { - e.printStackTrace(); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } catch (NoSuchFieldException e) { - e.printStackTrace(); - } - } - -} diff --git a/common/src/main/java/com/alibaba/nacos/common/http/AbstractApacheHttpClientFactory.java b/common/src/main/java/com/alibaba/nacos/common/http/AbstractApacheHttpClientFactory.java index 1d3c32e397c..5d70ef14c83 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/AbstractApacheHttpClientFactory.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/AbstractApacheHttpClientFactory.java @@ -30,9 +30,15 @@ public abstract class AbstractApacheHttpClientFactory extends AbstractHttpClient @Override public final NacosRestTemplate createNacosRestTemplate() { + final HttpClientConfig originalRequestConfig = buildHttpClientConfig(); final RequestConfig requestConfig = getRequestConfig(); - return new NacosRestTemplate(assignLogger(), - new DefaultHttpClientRequest(HttpClients.custom().setDefaultRequestConfig(requestConfig).build())); + return new NacosRestTemplate(assignLogger(), new DefaultHttpClientRequest( + HttpClients.custom().setDefaultRequestConfig(requestConfig) + .setUserAgent(originalRequestConfig.getUserAgent()) + .setMaxConnTotal(originalRequestConfig.getMaxConnTotal()) + .setMaxConnPerRoute(originalRequestConfig.getMaxConnPerRoute()) + .setConnectionTimeToLive(originalRequestConfig.getConnTimeToLive(), + originalRequestConfig.getConnTimeToLiveTimeUnit()).build())); } } diff --git a/common/src/main/java/com/alibaba/nacos/common/http/AbstractHttpClientFactory.java b/common/src/main/java/com/alibaba/nacos/common/http/AbstractHttpClientFactory.java index dd85b874461..54b0fd715c9 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/AbstractHttpClientFactory.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/AbstractHttpClientFactory.java @@ -67,15 +67,20 @@ public void onChanged(String filePath) { @Override public NacosAsyncRestTemplate createNacosAsyncRestTemplate() { - RequestConfig requestConfig = getRequestConfig(); + final HttpClientConfig originalRequestConfig = buildHttpClientConfig(); + final RequestConfig requestConfig = getRequestConfig(); return new NacosAsyncRestTemplate(assignLogger(), new DefaultAsyncHttpClientRequest( - HttpAsyncClients.custom().setDefaultRequestConfig(requestConfig).build())); + HttpAsyncClients.custom().setDefaultRequestConfig(requestConfig) + .setMaxConnTotal(originalRequestConfig.getMaxConnTotal()) + .setMaxConnPerRoute(originalRequestConfig.getMaxConnPerRoute()) + .setUserAgent(originalRequestConfig.getUserAgent()).build())); } protected RequestConfig getRequestConfig() { HttpClientConfig httpClientConfig = buildHttpClientConfig(); return RequestConfig.custom().setConnectTimeout(httpClientConfig.getConTimeOutMillis()) .setSocketTimeout(httpClientConfig.getReadTimeOutMillis()) + .setConnectionRequestTimeout(httpClientConfig.getConnectionRequestTimeout()) .setMaxRedirects(httpClientConfig.getMaxRedirects()).build(); } diff --git a/common/src/main/java/com/alibaba/nacos/common/http/BaseHttpClient.java b/common/src/main/java/com/alibaba/nacos/common/http/BaseHttpClient.java index 7881af077a7..18bd1782d04 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/BaseHttpClient.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/BaseHttpClient.java @@ -16,7 +16,6 @@ package com.alibaba.nacos.common.http; -import com.alibaba.nacos.common.constant.HttpHeaderConsts; import com.alibaba.nacos.common.http.handler.ResponseHandler; import com.alibaba.nacos.common.http.param.Header; import com.alibaba.nacos.common.http.param.Query; @@ -103,7 +102,7 @@ protected HttpRequestBase build(String url, Header header, Object body, String m final BaseHttpMethod httpMethod = BaseHttpMethod.sourceOf(method); final HttpRequestBase httpRequestBase = httpMethod.init(url); HttpUtils.initRequestHeader(httpRequestBase, header); - HttpUtils.initRequestEntity(httpRequestBase, body, header.getValue(HttpHeaderConsts.CONTENT_TYPE)); + HttpUtils.initRequestEntity(httpRequestBase, body, header); return httpRequestBase; } diff --git a/common/src/main/java/com/alibaba/nacos/common/http/BaseHttpMethod.java b/common/src/main/java/com/alibaba/nacos/common/http/BaseHttpMethod.java index 4ccb2407b0d..b53cfa36d24 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/BaseHttpMethod.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/BaseHttpMethod.java @@ -84,6 +84,16 @@ protected HttpRequestBase createRequest(String url) { } }, + /** + * delete Large request. + */ + DELETE_LARGE(HttpMethod.DELETE_LARGE) { + @Override + protected HttpRequestBase createRequest(String url) { + return new HttpDeleteWithEntity(url); + } + }, + /** * head request. */ @@ -155,6 +165,10 @@ public static BaseHttpMethod sourceOf(String name) { /** * get Large implemented. + *

+ * Mainly used for GET request parameters are relatively large, can not be placed on the URL, so it needs to be + * placed in the body. + *

*/ public static class HttpGetWithEntity extends HttpEntityEnclosingRequestBase { @@ -171,4 +185,26 @@ public String getMethod() { } } + /** + * delete Large implemented. + *

+ * Mainly used for DELETE request parameters are relatively large, can not be placed on the URL, so it needs to be + * placed in the body. + *

+ */ + public static class HttpDeleteWithEntity extends HttpEntityEnclosingRequestBase { + + public static final String METHOD_NAME = "DELETE"; + + public HttpDeleteWithEntity(String url) { + super(); + setURI(URI.create(url)); + } + + @Override + public String getMethod() { + return METHOD_NAME; + } + } + } diff --git a/common/src/main/java/com/alibaba/nacos/common/http/HttpClientConfig.java b/common/src/main/java/com/alibaba/nacos/common/http/HttpClientConfig.java index cc5b9993bad..ae50ab485b6 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/HttpClientConfig.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/HttpClientConfig.java @@ -16,6 +16,8 @@ package com.alibaba.nacos.common.http; +import java.util.concurrent.TimeUnit; + /** * http client config build. * @@ -23,16 +25,62 @@ */ public class HttpClientConfig { + /** + * connect time out. + */ private final int conTimeOutMillis; + /** + * read time out. + */ private final int readTimeOutMillis; + /** + * connTimeToLive. + */ + private final long connTimeToLive; + + /** + * connTimeToLiveTimeUnit. + */ + private final TimeUnit connTimeToLiveTimeUnit; + + /** + * connectionRequestTimeout. + */ + private final int connectionRequestTimeout; + + /** + * max redirect. + */ private final int maxRedirects; - public HttpClientConfig(int conTimeOutMillis, int readTimeOutMillis, int maxRedirects) { + /** + * max connect total. + */ + private final int maxConnTotal; + + /** + * Assigns maximum connection per route value. + */ + private final int maxConnPerRoute; + + /** + * user agent. + */ + private final String userAgent; + + public HttpClientConfig(int conTimeOutMillis, int readTimeOutMillis, long connTimeToLive, TimeUnit timeUnit, + int connectionRequestTimeout, int maxRedirects, int maxConnTotal, int maxConnPerRoute, String userAgent) { this.conTimeOutMillis = conTimeOutMillis; this.readTimeOutMillis = readTimeOutMillis; + this.connTimeToLive = connTimeToLive; + this.connTimeToLiveTimeUnit = timeUnit; + this.connectionRequestTimeout = connectionRequestTimeout; this.maxRedirects = maxRedirects; + this.maxConnTotal = maxConnTotal; + this.maxConnPerRoute = maxConnPerRoute; + this.userAgent = userAgent; } public int getConTimeOutMillis() { @@ -43,10 +91,34 @@ public int getReadTimeOutMillis() { return readTimeOutMillis; } + public long getConnTimeToLive() { + return connTimeToLive; + } + + public TimeUnit getConnTimeToLiveTimeUnit() { + return connTimeToLiveTimeUnit; + } + + public int getConnectionRequestTimeout() { + return connectionRequestTimeout; + } + public int getMaxRedirects() { return maxRedirects; } + public int getMaxConnTotal() { + return maxConnTotal; + } + + public int getMaxConnPerRoute() { + return maxConnPerRoute; + } + + public String getUserAgent() { + return userAgent; + } + public static HttpClientConfigBuilder builder() { return new HttpClientConfigBuilder(); } @@ -57,8 +129,20 @@ public static final class HttpClientConfigBuilder { private int readTimeOutMillis = -1; + private long connTimeToLive = -1; + + private TimeUnit connTimeToLiveTimeUnit = TimeUnit.MILLISECONDS; + + private int connectionRequestTimeout = -1; + private int maxRedirects = 50; + private int maxConnTotal = 0; + + private int maxConnPerRoute = 0; + + private String userAgent; + public HttpClientConfigBuilder setConTimeOutMillis(int conTimeOutMillis) { this.conTimeOutMillis = conTimeOutMillis; return this; @@ -69,13 +153,40 @@ public HttpClientConfigBuilder setReadTimeOutMillis(int readTimeOutMillis) { return this; } + public HttpClientConfigBuilder setConnectionTimeToLive(long connTimeToLive, TimeUnit connTimeToLiveTimeUnit) { + this.connTimeToLive = connTimeToLive; + this.connTimeToLiveTimeUnit = connTimeToLiveTimeUnit; + return this; + } + + public HttpClientConfigBuilder setConnectionRequestTimeout(int connectionRequestTimeout) { + this.connectionRequestTimeout = connectionRequestTimeout; + return this; + } + public HttpClientConfigBuilder setMaxRedirects(int maxRedirects) { this.maxRedirects = maxRedirects; return this; } + public HttpClientConfigBuilder setMaxConnTotal(int maxConnTotal) { + this.maxConnTotal = maxConnTotal; + return this; + } + + public HttpClientConfigBuilder setMaxConnPerRoute(int maxConnPerRoute) { + this.maxConnPerRoute = maxConnPerRoute; + return this; + } + + public HttpClientConfigBuilder setUserAgent(String userAgent) { + this.userAgent = userAgent; + return this; + } + public HttpClientConfig build() { - return new HttpClientConfig(conTimeOutMillis, readTimeOutMillis, maxRedirects); + return new HttpClientConfig(conTimeOutMillis, readTimeOutMillis, connTimeToLive, connTimeToLiveTimeUnit, + connectionRequestTimeout, maxRedirects, maxConnTotal, maxConnPerRoute, userAgent); } } } diff --git a/common/src/main/java/com/alibaba/nacos/common/http/HttpUtils.java b/common/src/main/java/com/alibaba/nacos/common/http/HttpUtils.java index 97f6f53600f..54f99affc3e 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/HttpUtils.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/HttpUtils.java @@ -16,15 +16,18 @@ package com.alibaba.nacos.common.http; -import com.alibaba.nacos.common.http.handler.RequestHandler; +import com.alibaba.nacos.common.constant.HttpHeaderConsts; import com.alibaba.nacos.common.http.param.Header; +import com.alibaba.nacos.common.http.param.MediaType; import com.alibaba.nacos.common.http.param.Query; +import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.common.utils.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpEntityEnclosingRequest; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.entity.ByteArrayEntity; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; import org.apache.http.message.BasicNameValuePair; @@ -70,17 +73,23 @@ public static void initRequestHeader(HttpRequestBase requestBase, Header header) * * @param requestBase requestBase {@link HttpRequestBase} * @param body body - * @param mediaType mediaType {@link ContentType} + * @param header request header * @throws Exception exception */ - public static void initRequestEntity(HttpRequestBase requestBase, Object body, String mediaType) throws Exception { + public static void initRequestEntity(HttpRequestBase requestBase, Object body, Header header) throws Exception { if (body == null) { return; } if (requestBase instanceof HttpEntityEnclosingRequest) { HttpEntityEnclosingRequest request = (HttpEntityEnclosingRequest) requestBase; - ContentType contentType = ContentType.create(mediaType); - StringEntity entity = new StringEntity(RequestHandler.parse(body), contentType); + MediaType mediaType = MediaType.valueOf(header.getValue(HttpHeaderConsts.CONTENT_TYPE)); + ContentType contentType = ContentType.create(mediaType.getType(), mediaType.getCharset()); + HttpEntity entity; + if (body instanceof byte[]) { + entity = new ByteArrayEntity((byte[]) body, contentType); + } else { + entity = new StringEntity(body instanceof String ? (String) body : JacksonUtils.toJson(body), contentType); + } request.setEntity(entity); } } diff --git a/common/src/main/java/com/alibaba/nacos/common/http/client/NacosAsyncRestTemplate.java b/common/src/main/java/com/alibaba/nacos/common/http/client/NacosAsyncRestTemplate.java index 082400113ee..ad9ff06cbd0 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/client/NacosAsyncRestTemplate.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/client/NacosAsyncRestTemplate.java @@ -105,6 +105,27 @@ public void delete(String url, Header header, Query query, Type responseType execute(url, HttpMethod.DELETE, new RequestHttpEntity(header, query), responseType, callback); } + /** + * async http delete large request, when the parameter exceeds the URL limit, you can use this method to put the + * parameter into the body pass. + * + *

{@code responseType} can be an RestResult or RestResult data {@code T} type + * + *

{@code callback} Result callback execution, + * if you need response headers, you can convert the received RestResult to HttpRestResult. + * + * @param url url + * @param header http header param + * @param body body + * @param responseType return type + * @param callback callback {@link Callback#onReceive(com.alibaba.nacos.common.model.RestResult)} + */ + public void delete(String url, Header header, String body, Type responseType, Callback callback) { + execute(url, HttpMethod.DELETE_LARGE, + new RequestHttpEntity(header.setContentType(MediaType.APPLICATION_JSON), Query.EMPTY, body), + responseType, callback); + } + /** * async http put Create a new resource by PUTting the given body to http request. * diff --git a/common/src/main/java/com/alibaba/nacos/common/http/client/NacosRestTemplate.java b/common/src/main/java/com/alibaba/nacos/common/http/client/NacosRestTemplate.java index f7b3693a522..1d60c2e4cff 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/client/NacosRestTemplate.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/client/NacosRestTemplate.java @@ -427,6 +427,26 @@ public HttpRestResult exchangeForm(String url, Header header, Query query return execute(url, httpMethod, requestHttpEntity, responseType); } + /** + * Execute the HTTP method to the given URI template, writing the given request entity to the request, and returns + * the response as {@link HttpRestResult}. + * + * @param url url + * @param config HttpClientConfig + * @param header http header param + * @param query http query param + * @param body http body param + * @param httpMethod http method + * @param responseType return type + * @return {@link HttpRestResult} + * @throws Exception ex + */ + public HttpRestResult exchange(String url, HttpClientConfig config, Header header, Query query, + Object body, String httpMethod, Type responseType) throws Exception { + RequestHttpEntity requestHttpEntity = new RequestHttpEntity(config, header, query, body); + return execute(url, httpMethod, requestHttpEntity, responseType); + } + /** * Set the request interceptors that this accessor should use. * diff --git a/common/src/main/java/com/alibaba/nacos/common/http/client/request/DefaultHttpClientRequest.java b/common/src/main/java/com/alibaba/nacos/common/http/client/request/DefaultHttpClientRequest.java index 2a84c390b3c..d59010532d4 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/client/request/DefaultHttpClientRequest.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/client/request/DefaultHttpClientRequest.java @@ -65,7 +65,7 @@ static HttpRequestBase build(URI uri, String method, RequestHttpEntity requestHt && requestHttpEntity.getBody() instanceof Map) { HttpUtils.initRequestFromEntity(httpRequestBase, (Map) requestHttpEntity.getBody(), headers.getCharset()); } else { - HttpUtils.initRequestEntity(httpRequestBase, requestHttpEntity.getBody(), headers.getValue(HttpHeaderConsts.CONTENT_TYPE)); + HttpUtils.initRequestEntity(httpRequestBase, requestHttpEntity.getBody(), headers); } replaceDefaultConfig(httpRequestBase, requestHttpEntity.getHttpClientConfig()); return httpRequestBase; diff --git a/common/src/main/java/com/alibaba/nacos/common/http/client/request/JdkHttpClientRequest.java b/common/src/main/java/com/alibaba/nacos/common/http/client/request/JdkHttpClientRequest.java index 7649b4eb5f1..fd921158c33 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/client/request/JdkHttpClientRequest.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/client/request/JdkHttpClientRequest.java @@ -90,7 +90,7 @@ public HttpClientResponse execute(URI uri, String httpMethod, RequestHttpEntity conn.setConnectTimeout(this.httpClientConfig.getConTimeOutMillis()); conn.setReadTimeout(this.httpClientConfig.getReadTimeOutMillis()); conn.setRequestMethod(httpMethod); - if (body != null) { + if (body != null && !"".equals(body)) { String contentType = headers.getValue(HttpHeaderConsts.CONTENT_TYPE); String bodyStr = JacksonUtils.toJson(body); if (MediaType.APPLICATION_FORM_URLENCODED.equals(contentType)) { diff --git a/common/src/main/java/com/alibaba/nacos/common/http/client/response/JdkHttpClientResponse.java b/common/src/main/java/com/alibaba/nacos/common/http/client/response/JdkHttpClientResponse.java index f4ad0794db3..90fef344589 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/client/response/JdkHttpClientResponse.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/client/response/JdkHttpClientResponse.java @@ -16,9 +16,11 @@ package com.alibaba.nacos.common.http.client.response; +import com.alibaba.nacos.common.constant.HttpHeaderConsts; import com.alibaba.nacos.common.http.param.Header; import com.alibaba.nacos.common.utils.IoUtils; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; @@ -36,6 +38,8 @@ public class JdkHttpClientResponse implements HttpClientResponse { private Header responseHeader; + private static final String CONTENT_ENCODING = "gzip"; + public JdkHttpClientResponse(HttpURLConnection conn) { this.conn = conn; } @@ -51,8 +55,18 @@ public Header getHeaders() { @Override public InputStream getBody() throws IOException { + Header headers = getHeaders(); InputStream errorStream = this.conn.getErrorStream(); this.responseStream = (errorStream != null ? errorStream : this.conn.getInputStream()); + String contentEncoding = headers.getValue(HttpHeaderConsts.CONTENT_ENCODING); + // Used to process http content_encoding, when content_encoding is GZIP, use GZIPInputStream + if (CONTENT_ENCODING.equals(contentEncoding)) { + byte[] bytes = IoUtils.tryDecompress(this.responseStream); + if (bytes == null) { + throw new IOException("decompress http response error"); + } + return new ByteArrayInputStream(bytes); + } return this.responseStream; } diff --git a/common/src/main/java/com/alibaba/nacos/common/http/param/Header.java b/common/src/main/java/com/alibaba/nacos/common/http/param/Header.java index bebba34eac5..fcaf31c72b1 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/param/Header.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/param/Header.java @@ -18,6 +18,7 @@ import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.common.constant.HttpHeaderConsts; +import com.alibaba.nacos.common.utils.MapUtils; import com.alibaba.nacos.common.utils.StringUtils; import java.util.ArrayList; @@ -45,7 +46,6 @@ private Header() { addParam(HttpHeaderConsts.CONTENT_TYPE, MediaType.APPLICATION_JSON); addParam(HttpHeaderConsts.ACCEPT_CHARSET, "UTF-8"); addParam(HttpHeaderConsts.ACCEPT_ENCODING, "gzip"); - addParam(HttpHeaderConsts.CONTENT_ENCODING, "gzip"); } public static Header newInstance() { @@ -130,8 +130,10 @@ public Header addAll(List list) { * @param params parameters */ public void addAll(Map params) { - for (Map.Entry entry : params.entrySet()) { - addParam(entry.getKey(), entry.getValue()); + if (MapUtils.isNotEmpty(params)) { + for (Map.Entry entry : params.entrySet()) { + addParam(entry.getKey(), entry.getValue()); + } } } @@ -143,9 +145,11 @@ public void addAll(Map params) { * @param headers original response header */ public void setOriginalResponseHeader(Map> headers) { - this.originalResponseHeader.putAll(headers); - for (Map.Entry> entry : this.originalResponseHeader.entrySet()) { - addParam(entry.getKey(), entry.getValue().get(0)); + if (MapUtils.isNotEmpty(headers)) { + this.originalResponseHeader.putAll(headers); + for (Map.Entry> entry : this.originalResponseHeader.entrySet()) { + addParam(entry.getKey(), entry.getValue().get(0)); + } } } diff --git a/common/src/main/java/com/alibaba/nacos/common/http/param/MediaType.java b/common/src/main/java/com/alibaba/nacos/common/http/param/MediaType.java index ecb05abb19a..774c48307f4 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/param/MediaType.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/param/MediaType.java @@ -16,6 +16,9 @@ package com.alibaba.nacos.common.http.param; +import com.alibaba.nacos.api.common.Constants; +import com.alibaba.nacos.common.utils.StringUtils; + /** * Http Media type. * @@ -23,12 +26,9 @@ */ public final class MediaType { - private MediaType() { - } - public static final String APPLICATION_ATOM_XML = "application/atom+xml"; - public static final String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded"; + public static final String APPLICATION_FORM_URLENCODED = "application/x-www-form-urlencoded;charset=UTF-8"; public static final String APPLICATION_OCTET_STREAM = "application/octet-stream"; @@ -36,14 +36,76 @@ private MediaType() { public static final String APPLICATION_XHTML_XML = "application/xhtml+xml"; - public static final String APPLICATION_XML = "application/xml"; + public static final String APPLICATION_XML = "application/xml;charset=UTF-8"; + + public static final String APPLICATION_JSON = "application/json;charset=UTF-8"; + + public static final String MULTIPART_FORM_DATA = "multipart/form-data;charset=UTF-8"; + + public static final String TEXT_HTML = "text/html;charset=UTF-8"; + + public static final String TEXT_PLAIN = "text/plain;charset=UTF-8"; + + private MediaType(String type, String charset) { + this.type = type; + this.charset = charset; + } + + /** + * content type. + */ + private final String type; - public static final String APPLICATION_JSON = "application/json"; + /** + * content type charset. + */ + private final String charset; + + /** + * Parse the given String contentType into a {@code MediaType} object. + * + * @param contentType mediaType + * @return MediaType + */ + public static MediaType valueOf(String contentType) { + if (StringUtils.isEmpty(contentType)) { + throw new IllegalArgumentException("MediaType must not be empty"); + } + String[] values = contentType.split(";"); + String charset = Constants.ENCODE; + for (String value : values) { + if (value.startsWith("charset=")) { + charset = value.substring("charset=".length()); + } + } + return new MediaType(values[0], charset); + } - public static final String MULTIPART_FORM_DATA = "multipart/form-data"; + /** + * Use the given contentType and charset to assemble into a {@code MediaType} object. + * + * @param contentType contentType + * @param charset charset + * @return MediaType + */ + public static MediaType valueOf(String contentType, String charset) { + if (StringUtils.isEmpty(contentType)) { + throw new IllegalArgumentException("MediaType must not be empty"); + } + String[] values = contentType.split(";"); + return new MediaType(values[0], StringUtils.isEmpty(charset) ? Constants.ENCODE : charset); + } - public static final String TEXT_HTML = "text/html"; + public String getType() { + return type; + } - public static final String TEXT_PLAIN = "text/plain"; + public String getCharset() { + return charset; + } + @Override + public String toString() { + return type + ";charset=" + charset; + } } diff --git a/common/src/main/java/com/alibaba/nacos/common/http/param/Query.java b/common/src/main/java/com/alibaba/nacos/common/http/param/Query.java index 1b241334343..4c4029e4246 100644 --- a/common/src/main/java/com/alibaba/nacos/common/http/param/Query.java +++ b/common/src/main/java/com/alibaba/nacos/common/http/param/Query.java @@ -16,6 +16,8 @@ package com.alibaba.nacos.common.http.param; +import com.alibaba.nacos.common.utils.MapUtils; + import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.LinkedHashMap; @@ -68,8 +70,10 @@ public Object getValue(String key) { * @return this query */ public Query initParams(Map params) { - for (Map.Entry entry : params.entrySet()) { - addParam(entry.getKey(), entry.getValue()); + if (MapUtils.isNotEmpty(params)) { + for (Map.Entry entry : params.entrySet()) { + addParam(entry.getKey(), entry.getValue()); + } } return this; } diff --git a/common/src/main/java/com/alibaba/nacos/common/model/RequestHttpEntity.java b/common/src/main/java/com/alibaba/nacos/common/model/RequestHttpEntity.java index b2c03253d07..2240002e671 100644 --- a/common/src/main/java/com/alibaba/nacos/common/model/RequestHttpEntity.java +++ b/common/src/main/java/com/alibaba/nacos/common/model/RequestHttpEntity.java @@ -26,7 +26,6 @@ * Represents an HTTP request , consisting of headers and body. * * @author mai.jh - * @date 2020/5/23 */ public class RequestHttpEntity { @@ -36,7 +35,7 @@ public class RequestHttpEntity { private final Query query; - private Object body; + private final Object body; public RequestHttpEntity(Header header, Query query) { this(null, header, query); diff --git a/common/src/main/java/com/alibaba/nacos/common/notify/DefaultSharePublisher.java b/common/src/main/java/com/alibaba/nacos/common/notify/DefaultSharePublisher.java index 3028423f7f7..a2fa996d1db 100644 --- a/common/src/main/java/com/alibaba/nacos/common/notify/DefaultSharePublisher.java +++ b/common/src/main/java/com/alibaba/nacos/common/notify/DefaultSharePublisher.java @@ -96,6 +96,10 @@ public void receiveEvent(Event event) { // Get for Map, the algorithm is O(1). Set subscribers = subMappings.get(slowEventType); + if (null == subscribers) { + LOGGER.debug("[NotifyCenter] No subscribers for slow event {}", slowEventType.getName()); + return; + } // Notification single event subscriber for (Subscriber subscriber : subscribers) { diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/ConvertUtils.java b/common/src/main/java/com/alibaba/nacos/common/utils/ConvertUtils.java index 14432ecedcd..50670e4116d 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/ConvertUtils.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/ConvertUtils.java @@ -51,7 +51,11 @@ public static int toInt(String val, int defaultValue) { if (StringUtils.isBlank(val)) { return defaultValue; } - return Integer.parseInt(val); + try { + return Integer.parseInt(val); + } catch (NumberFormatException exception) { + return defaultValue; + } } /** @@ -77,7 +81,11 @@ public static long toLong(String val, long defaultValue) { if (StringUtils.isBlank(val)) { return defaultValue; } - return Long.parseLong(val); + try { + return Long.parseLong(val); + } catch (NumberFormatException exception) { + return defaultValue; + } } /** @@ -92,7 +100,11 @@ public static boolean toBoolean(String val, boolean defaultValue) { if (StringUtils.isBlank(val)) { return defaultValue; } - return Boolean.parseBoolean(val); + try { + return Boolean.parseBoolean(val); + } catch (NumberFormatException exception) { + return defaultValue; + } } // The following utility functions are extracted from org.apache.commons.lang3 @@ -126,7 +138,7 @@ public static boolean toBoolean(String val, boolean defaultValue) { * @return the boolean value of the string, {@code false} if no match or the String is null */ public static boolean toBoolean(final String str) { - return toBooleanObject(str) == Boolean.TRUE; + return Boolean.TRUE.equals(toBooleanObject(str)); } /** diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/HttpMethod.java b/common/src/main/java/com/alibaba/nacos/common/utils/HttpMethod.java index 688433facab..c605bd9b971 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/HttpMethod.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/HttpMethod.java @@ -26,8 +26,10 @@ public class HttpMethod { public static final String GET = "GET"; - // this is only use in nacos, Custom request type, essentially a get request - + /** + * this is only use in nacos, Custom request type, essentially a GET request, Mainly used for GET request parameters + * are relatively large,can not be placed on the URL, so it needs to be placed in the body. + */ public static final String GET_LARGE = "GET-LARGE"; public static final String HEAD = "HEAD"; @@ -40,6 +42,12 @@ public class HttpMethod { public static final String DELETE = "DELETE"; + /** + * this is only use in nacos, Custom request type, essentially a DELETE request, Mainly used for DELETE request + * parameters are relatively large, can not be placed on the URL, so it needs to be placed in the body. + */ + public static final String DELETE_LARGE = "DELETE_LARGE"; + public static final String OPTIONS = "OPTIONS"; public static final String TRACE = "TRACE"; diff --git a/common/src/main/java/com/alibaba/nacos/common/utils/IoUtils.java b/common/src/main/java/com/alibaba/nacos/common/utils/IoUtils.java index 0f949ba425f..c38de6dad3b 100644 --- a/common/src/main/java/com/alibaba/nacos/common/utils/IoUtils.java +++ b/common/src/main/java/com/alibaba/nacos/common/utils/IoUtils.java @@ -50,9 +50,9 @@ public class IoUtils { * * @param raw compress stream * @return byte array after decompress - * @throws Exception exception + * @throws IOException exception */ - public static byte[] tryDecompress(InputStream raw) throws Exception { + public static byte[] tryDecompress(InputStream raw) throws IOException { GZIPInputStream gis = null; ByteArrayOutputStream out = null; try { @@ -60,7 +60,7 @@ public static byte[] tryDecompress(InputStream raw) throws Exception { out = new ByteArrayOutputStream(); copy(gis, out); return out.toByteArray(); - } catch (Exception e) { + } catch (IOException e) { e.printStackTrace(); } finally { if (out != null) { diff --git a/common/src/test/java/com/alibaba/nacos/common/http/param/MediaTypeTest.java b/common/src/test/java/com/alibaba/nacos/common/http/param/MediaTypeTest.java new file mode 100644 index 00000000000..eddbfecb31f --- /dev/null +++ b/common/src/test/java/com/alibaba/nacos/common/http/param/MediaTypeTest.java @@ -0,0 +1,62 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.nacos.common.http.param; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +/** + * MediaTypeTest. + * + * @author mai.jh + */ +public class MediaTypeTest { + + @Test + public void testValueOf() { + MediaType mediaType = MediaType.valueOf(MediaType.APPLICATION_FORM_URLENCODED); + String type = "application/x-www-form-urlencoded"; + String charset = "UTF-8"; + assertEquals(type, mediaType.getType()); + assertEquals(charset, mediaType.getCharset()); + assertEquals(MediaType.APPLICATION_FORM_URLENCODED, mediaType.toString()); + } + + @Test + public void testValueOf2() { + MediaType mediaType = MediaType.valueOf(MediaType.APPLICATION_FORM_URLENCODED, "ISO-8859-1"); + String type = "application/x-www-form-urlencoded"; + String charset = "ISO-8859-1"; + String excepted = "application/x-www-form-urlencoded;charset=ISO-8859-1"; + assertEquals(type, mediaType.getType()); + assertEquals(charset, mediaType.getCharset()); + assertEquals(excepted, mediaType.toString()); + } + + @Test + public void testValueOf3() { + MediaType mediaType = MediaType.valueOf("application/x-www-form-urlencoded", "ISO-8859-1"); + String type = "application/x-www-form-urlencoded"; + String charset = "ISO-8859-1"; + String excepted = "application/x-www-form-urlencoded;charset=ISO-8859-1"; + assertEquals(type, mediaType.getType()); + assertEquals(charset, mediaType.getCharset()); + assertEquals(excepted, mediaType.toString()); + } + +} diff --git a/common/src/test/java/com/alibaba/nacos/common/notify/NotifyCenterTest.java b/common/src/test/java/com/alibaba/nacos/common/notify/NotifyCenterTest.java index a7163938d00..d1abd7c1e73 100644 --- a/common/src/test/java/com/alibaba/nacos/common/notify/NotifyCenterTest.java +++ b/common/src/test/java/com/alibaba/nacos/common/notify/NotifyCenterTest.java @@ -132,6 +132,7 @@ public Class subscribeType() { return ExpireEvent.class; } + @Override public boolean ignoreExpireEvent() { return true; } diff --git a/config/src/main/java/com/alibaba/nacos/config/server/configuration/ConditionDistributedEmbedStorage.java b/config/src/main/java/com/alibaba/nacos/config/server/configuration/ConditionDistributedEmbedStorage.java index 176b1162e82..5d3d0b8a64e 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/configuration/ConditionDistributedEmbedStorage.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/configuration/ConditionDistributedEmbedStorage.java @@ -17,7 +17,7 @@ package com.alibaba.nacos.config.server.configuration; import com.alibaba.nacos.config.server.utils.PropertyUtil; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/configuration/ConditionStandaloneEmbedStorage.java b/config/src/main/java/com/alibaba/nacos/config/server/configuration/ConditionStandaloneEmbedStorage.java index 4380d3811cd..2a6fcf56de7 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/configuration/ConditionStandaloneEmbedStorage.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/configuration/ConditionStandaloneEmbedStorage.java @@ -17,7 +17,7 @@ package com.alibaba.nacos.config.server.configuration; import com.alibaba.nacos.config.server.utils.PropertyUtil; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.springframework.context.annotation.Condition; import org.springframework.context.annotation.ConditionContext; import org.springframework.core.type.AnnotatedTypeMetadata; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java b/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java index be8505eede6..90d42a3bd43 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java @@ -45,7 +45,7 @@ import com.alibaba.nacos.config.server.utils.RequestUtil; import com.alibaba.nacos.config.server.utils.TimeUtils; import com.alibaba.nacos.config.server.utils.ZipUtils; -import com.alibaba.nacos.core.utils.InetUtils; +import com.alibaba.nacos.sys.utils.InetUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.slf4j.Logger; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigOpsController.java b/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigOpsController.java index 54bf19c2323..6c94e1d984c 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigOpsController.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigOpsController.java @@ -31,7 +31,7 @@ import com.alibaba.nacos.config.server.service.repository.embedded.DatabaseOperate; import com.alibaba.nacos.config.server.utils.LogUtil; import com.alibaba.nacos.config.server.utils.PropertyUtil; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.WebUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/controller/HealthController.java b/config/src/main/java/com/alibaba/nacos/config/server/controller/HealthController.java index 1be5375c08d..10870b97755 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/controller/HealthController.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/controller/HealthController.java @@ -20,7 +20,7 @@ import com.alibaba.nacos.config.server.service.datasource.DataSourceService; import com.alibaba.nacos.config.server.service.datasource.DynamicDataSource; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.InetUtils; +import com.alibaba.nacos.sys.utils.InetUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/model/app/ApplicationInfo.java b/config/src/main/java/com/alibaba/nacos/config/server/model/app/ApplicationInfo.java index 48930e5a19c..0100068adc2 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/model/app/ApplicationInfo.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/model/app/ApplicationInfo.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.config.server.model.app; -import com.alibaba.nacos.core.utils.InetUtils; +import com.alibaba.nacos.sys.utils.InetUtils; /** * ApplicationInfo. diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigChangePublisher.java b/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigChangePublisher.java index 99fdeaf0b95..9286416572b 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigChangePublisher.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigChangePublisher.java @@ -19,7 +19,7 @@ import com.alibaba.nacos.common.notify.NotifyCenter; import com.alibaba.nacos.config.server.model.event.ConfigDataChangeEvent; import com.alibaba.nacos.config.server.utils.PropertyUtil; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; /** * ConfigChangePublisher. diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigSubService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigSubService.java index 157f373a532..03b6bc8cb92 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigSubService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/ConfigSubService.java @@ -25,7 +25,7 @@ import com.alibaba.nacos.config.server.utils.LogUtil; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/ExternalDataSourceServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/ExternalDataSourceServiceImpl.java index 72510128265..58184d3dfd3 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/ExternalDataSourceServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/ExternalDataSourceServiceImpl.java @@ -42,7 +42,7 @@ import com.alibaba.nacos.config.server.monitor.MetricsMonitor; import com.alibaba.nacos.config.server.utils.ConfigExecutor; import com.alibaba.nacos.config.server.utils.PropertyUtil; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.zaxxer.hikari.HikariDataSource; /** diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/LocalDataSourceServiceImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/LocalDataSourceServiceImpl.java index 068e50679f0..3fb412e4d94 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/LocalDataSourceServiceImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/datasource/LocalDataSourceServiceImpl.java @@ -21,8 +21,8 @@ import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.utils.LogUtil; import com.alibaba.nacos.config.server.utils.PropertyUtil; -import com.alibaba.nacos.core.utils.DiskUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.DiskUtils; import com.zaxxer.hikari.HikariDataSource; import java.io.File; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpService.java index a0ebf570c54..f5d14285e7e 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/DumpService.java @@ -49,8 +49,8 @@ import com.alibaba.nacos.config.server.utils.LogUtil; import com.alibaba.nacos.config.server.utils.TimeUtils; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.alibaba.nacos.core.utils.InetUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.InetUtils; import com.alibaba.nacos.core.utils.TimerContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/dump/EmbeddedDumpService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/EmbeddedDumpService.java index f3d645ae12a..85abd81fa31 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/dump/EmbeddedDumpService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/dump/EmbeddedDumpService.java @@ -28,7 +28,7 @@ import com.alibaba.nacos.consistency.cp.MetadataKey; import com.alibaba.nacos.core.cluster.ServerMemberManager; import com.alibaba.nacos.core.distributed.ProtocolManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.GlobalExecutor; import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Component; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/merge/MergeDatumService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/merge/MergeDatumService.java index 61daddd3e6a..ef34f1d0148 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/merge/MergeDatumService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/merge/MergeDatumService.java @@ -27,8 +27,8 @@ import com.alibaba.nacos.config.server.utils.PropertyUtil; import com.alibaba.nacos.config.server.utils.TimeUtils; import com.alibaba.nacos.core.distributed.ProtocolManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.alibaba.nacos.core.utils.InetUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.InetUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/merge/MergeTaskProcessor.java b/config/src/main/java/com/alibaba/nacos/config/server/service/merge/MergeTaskProcessor.java index 44a7a308503..063a244f874 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/merge/MergeTaskProcessor.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/merge/MergeTaskProcessor.java @@ -28,7 +28,7 @@ import com.alibaba.nacos.config.server.service.trace.ConfigTraceService; import com.alibaba.nacos.config.server.utils.ContentUtils; import com.alibaba.nacos.config.server.utils.TimeUtils; -import com.alibaba.nacos.core.utils.InetUtils; +import com.alibaba.nacos.sys.utils.InetUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/notify/AsyncNotifyService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/notify/AsyncNotifyService.java index f38774bf551..102da8fc2ba 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/notify/AsyncNotifyService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/notify/AsyncNotifyService.java @@ -32,8 +32,8 @@ import com.alibaba.nacos.config.server.utils.LogUtil; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.alibaba.nacos.core.utils.InetUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.InetUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/notify/NotifyTaskProcessor.java b/config/src/main/java/com/alibaba/nacos/config/server/service/notify/NotifyTaskProcessor.java index 9002f0eb8f5..79bdd56c484 100755 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/notify/NotifyTaskProcessor.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/notify/NotifyTaskProcessor.java @@ -24,8 +24,8 @@ import com.alibaba.nacos.config.server.service.trace.ConfigTraceService; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.alibaba.nacos.core.utils.InetUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.InetUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/DerbySnapshotOperation.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/DerbySnapshotOperation.java index 8fa6c7b101d..7357c393d6b 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/DerbySnapshotOperation.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/DerbySnapshotOperation.java @@ -27,8 +27,8 @@ import com.alibaba.nacos.consistency.snapshot.SnapshotOperation; import com.alibaba.nacos.consistency.snapshot.Writer; import com.alibaba.nacos.core.distributed.raft.utils.RaftExecutor; -import com.alibaba.nacos.core.utils.DiskUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.DiskUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.TimerContext; import com.alipay.sofa.jraft.util.CRC64; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/DistributedDatabaseOperateImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/DistributedDatabaseOperateImpl.java index 081a7e5dd00..cfd0a7b19c1 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/DistributedDatabaseOperateImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/DistributedDatabaseOperateImpl.java @@ -57,7 +57,7 @@ import com.alibaba.nacos.core.cluster.ServerMemberManager; import com.alibaba.nacos.core.distributed.ProtocolManager; import com.alibaba.nacos.core.utils.ClassUtils; -import com.alibaba.nacos.core.utils.DiskUtils; +import com.alibaba.nacos.sys.utils.DiskUtils; import com.alibaba.nacos.core.utils.GenericType; import com.google.common.base.Preconditions; import com.google.protobuf.ByteString; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/StandaloneDatabaseOperateImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/StandaloneDatabaseOperateImpl.java index 332494fb0f6..d556e9d3d1b 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/StandaloneDatabaseOperateImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/embedded/StandaloneDatabaseOperateImpl.java @@ -24,7 +24,7 @@ import com.alibaba.nacos.config.server.service.datasource.DynamicDataSource; import com.alibaba.nacos.config.server.service.sql.ModifyRequest; import com.alibaba.nacos.config.server.utils.LogUtil; -import com.alibaba.nacos.core.utils.DiskUtils; +import com.alibaba.nacos.sys.utils.DiskUtils; import org.apache.commons.lang3.BooleanUtils; import org.springframework.context.annotation.Conditional; import org.springframework.jdbc.core.JdbcTemplate; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalStoragePaginationHelperImpl.java b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalStoragePaginationHelperImpl.java index 96e1311e0ee..18323134e52 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalStoragePaginationHelperImpl.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/repository/extrnal/ExternalStoragePaginationHelperImpl.java @@ -20,7 +20,7 @@ import com.alibaba.nacos.config.server.service.repository.PaginationHelper; import com.alibaba.nacos.config.server.service.sql.EmbeddedStorageContextUtils; import com.alibaba.nacos.config.server.utils.PropertyUtil; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/sql/EmbeddedStorageContextUtils.java b/config/src/main/java/com/alibaba/nacos/config/server/service/sql/EmbeddedStorageContextUtils.java index 3a4f3137203..8fe67939661 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/sql/EmbeddedStorageContextUtils.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/sql/EmbeddedStorageContextUtils.java @@ -21,7 +21,7 @@ import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.model.ConfigInfo; import com.alibaba.nacos.config.server.model.event.ConfigDumpEvent; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import java.sql.Timestamp; import java.util.ArrayList; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/service/trace/ConfigTraceService.java b/config/src/main/java/com/alibaba/nacos/config/server/service/trace/ConfigTraceService.java index de92852b75e..d1ae51f42c2 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/service/trace/ConfigTraceService.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/service/trace/ConfigTraceService.java @@ -20,7 +20,7 @@ import com.alibaba.nacos.config.server.constant.Constants; import com.alibaba.nacos.config.server.monitor.MetricsMonitor; import com.alibaba.nacos.config.server.utils.LogUtil; -import com.alibaba.nacos.core.utils.InetUtils; +import com.alibaba.nacos.sys.utils.InetUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/utils/DiskUtil.java b/config/src/main/java/com/alibaba/nacos/config/server/utils/DiskUtil.java index abfaae41832..9096a84c660 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/utils/DiskUtil.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/utils/DiskUtil.java @@ -19,7 +19,7 @@ import com.alibaba.nacos.common.utils.IoUtils; import com.alibaba.nacos.common.utils.MD5Utils; import com.alibaba.nacos.config.server.constant.Constants; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; diff --git a/config/src/main/java/com/alibaba/nacos/config/server/utils/PropertyUtil.java b/config/src/main/java/com/alibaba/nacos/config/server/utils/PropertyUtil.java index 91d7676c23c..7a62a66b718 100644 --- a/config/src/main/java/com/alibaba/nacos/config/server/utils/PropertyUtil.java +++ b/config/src/main/java/com/alibaba/nacos/config/server/utils/PropertyUtil.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.config.server.utils; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.slf4j.Logger; import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; diff --git a/config/src/test/java/com/alibaba/nacos/config/server/model/ConfigInfoTest.java b/config/src/test/java/com/alibaba/nacos/config/server/model/ConfigInfoTest.java index 321a69e9cc4..fb0225ed5e4 100644 --- a/config/src/test/java/com/alibaba/nacos/config/server/model/ConfigInfoTest.java +++ b/config/src/test/java/com/alibaba/nacos/config/server/model/ConfigInfoTest.java @@ -19,7 +19,7 @@ import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.consistency.IdGenerator; import com.alibaba.nacos.core.distributed.id.SnowFlowerIdGenerator; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.junit.Assert; import org.junit.Test; import org.springframework.core.env.StandardEnvironment; diff --git a/config/src/test/java/com/alibaba/nacos/config/server/service/ConfigChangePublisherTest.java b/config/src/test/java/com/alibaba/nacos/config/server/service/ConfigChangePublisherTest.java index 224e1e6fa68..154106bb0ad 100644 --- a/config/src/test/java/com/alibaba/nacos/config/server/service/ConfigChangePublisherTest.java +++ b/config/src/test/java/com/alibaba/nacos/config/server/service/ConfigChangePublisherTest.java @@ -21,7 +21,7 @@ import com.alibaba.nacos.common.notify.listener.Subscriber; import com.alibaba.nacos.config.server.model.event.ConfigDataChangeEvent; import com.alibaba.nacos.config.server.utils.PropertyUtil; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.junit.Assert; import org.junit.Test; diff --git a/console/src/main/java/com/alibaba/nacos/console/controller/ServerStateController.java b/console/src/main/java/com/alibaba/nacos/console/controller/ServerStateController.java index c1fc820c2b3..d889d1ad318 100644 --- a/console/src/main/java/com/alibaba/nacos/console/controller/ServerStateController.java +++ b/console/src/main/java/com/alibaba/nacos/console/controller/ServerStateController.java @@ -17,7 +17,7 @@ package com.alibaba.nacos.console.controller; import com.alibaba.nacos.common.utils.VersionUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/console/src/main/resources/application.properties b/console/src/main/resources/application.properties index bce0d38c8ab..06ac2498b93 100644 --- a/console/src/main/resources/application.properties +++ b/console/src/main/resources/application.properties @@ -175,3 +175,4 @@ nacos.istio.mcp.server.enabled=false # nacos.core.protocol.raft.data.read_index_type=ReadOnlySafe ### rpc request timeout, default 5 seconds # nacos.core.protocol.raft.data.rpc_request_timeout_ms=5000 + diff --git a/core/src/main/java/com/alibaba/nacos/core/auth/AuthFilter.java b/core/src/main/java/com/alibaba/nacos/core/auth/AuthFilter.java index 95fc13a194c..535778bb39a 100644 --- a/core/src/main/java/com/alibaba/nacos/core/auth/AuthFilter.java +++ b/core/src/main/java/com/alibaba/nacos/core/auth/AuthFilter.java @@ -24,7 +24,7 @@ import com.alibaba.nacos.auth.parser.ResourceParser; import com.alibaba.nacos.common.utils.ExceptionUtil; import com.alibaba.nacos.core.code.ControllerMethodsCache; -import com.alibaba.nacos.core.utils.Constants; +import com.alibaba.nacos.sys.env.Constants; import com.alibaba.nacos.core.utils.Loggers; import com.alibaba.nacos.core.utils.WebUtils; import org.apache.commons.lang3.StringUtils; diff --git a/core/src/main/java/com/alibaba/nacos/core/auth/condition/PathRequestCondition.java b/core/src/main/java/com/alibaba/nacos/core/auth/condition/PathRequestCondition.java index 6af1ff269c0..1c674d2aec7 100644 --- a/core/src/main/java/com/alibaba/nacos/core/auth/condition/PathRequestCondition.java +++ b/core/src/main/java/com/alibaba/nacos/core/auth/condition/PathRequestCondition.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.core.auth.condition; -import static com.alibaba.nacos.core.utils.Constants.REQUEST_PATH_SEPARATOR; +import static com.alibaba.nacos.sys.env.Constants.REQUEST_PATH_SEPARATOR; /** * request path info. method:{@link org.springframework.web.bind.annotation.RequestMapping#method()} path: {@link diff --git a/core/src/main/java/com/alibaba/nacos/core/cluster/Member.java b/core/src/main/java/com/alibaba/nacos/core/cluster/Member.java index 83040274f98..65090a155ce 100644 --- a/core/src/main/java/com/alibaba/nacos/core/cluster/Member.java +++ b/core/src/main/java/com/alibaba/nacos/core/cluster/Member.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.core.cluster; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.apache.commons.lang3.StringUtils; import java.util.Collections; diff --git a/core/src/main/java/com/alibaba/nacos/core/cluster/MemberUtils.java b/core/src/main/java/com/alibaba/nacos/core/cluster/MemberUtils.java index fa88a160306..02d2fbf10c0 100644 --- a/core/src/main/java/com/alibaba/nacos/core/cluster/MemberUtils.java +++ b/core/src/main/java/com/alibaba/nacos/core/cluster/MemberUtils.java @@ -17,8 +17,8 @@ package com.alibaba.nacos.core.cluster; import com.alibaba.nacos.common.utils.ExceptionUtil; -import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.Loggers; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.apache.commons.lang3.StringUtils; import java.time.LocalDateTime; diff --git a/core/src/main/java/com/alibaba/nacos/core/cluster/ServerMemberManager.java b/core/src/main/java/com/alibaba/nacos/core/cluster/ServerMemberManager.java index 77ac3a83a62..0101d2683d5 100644 --- a/core/src/main/java/com/alibaba/nacos/core/cluster/ServerMemberManager.java +++ b/core/src/main/java/com/alibaba/nacos/core/cluster/ServerMemberManager.java @@ -32,13 +32,13 @@ import com.alibaba.nacos.common.utils.ExceptionUtil; import com.alibaba.nacos.common.utils.VersionUtils; import com.alibaba.nacos.core.cluster.lookup.LookupFactory; -import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.Commons; -import com.alibaba.nacos.core.utils.Constants; import com.alibaba.nacos.core.utils.GenericType; import com.alibaba.nacos.core.utils.GlobalExecutor; -import com.alibaba.nacos.core.utils.InetUtils; import com.alibaba.nacos.core.utils.Loggers; +import com.alibaba.nacos.sys.env.Constants; +import com.alibaba.nacos.sys.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.InetUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.boot.web.context.WebServerInitializedEvent; import org.springframework.context.ApplicationListener; diff --git a/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/AddressServerMemberLookup.java b/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/AddressServerMemberLookup.java index 87331de113d..14d64f08e74 100644 --- a/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/AddressServerMemberLookup.java +++ b/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/AddressServerMemberLookup.java @@ -25,10 +25,10 @@ import com.alibaba.nacos.common.utils.ExceptionUtil; import com.alibaba.nacos.core.cluster.AbstractMemberLookup; import com.alibaba.nacos.core.cluster.MemberUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.GenericType; import com.alibaba.nacos.core.utils.GlobalExecutor; import com.alibaba.nacos.core.utils.Loggers; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.apache.commons.lang3.StringUtils; import java.io.Reader; diff --git a/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/FileConfigMemberLookup.java b/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/FileConfigMemberLookup.java index f51294db085..4228119a74c 100644 --- a/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/FileConfigMemberLookup.java +++ b/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/FileConfigMemberLookup.java @@ -20,11 +20,11 @@ import com.alibaba.nacos.core.cluster.AbstractMemberLookup; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.MemberUtils; -import com.alibaba.nacos.core.file.FileChangeEvent; -import com.alibaba.nacos.core.file.FileWatcher; -import com.alibaba.nacos.core.file.WatchFileCenter; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.file.FileChangeEvent; +import com.alibaba.nacos.sys.file.FileWatcher; +import com.alibaba.nacos.sys.file.WatchFileCenter; import com.alibaba.nacos.core.utils.Loggers; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; diff --git a/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/LookupFactory.java b/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/LookupFactory.java index 710ee598bf3..68fd2693834 100644 --- a/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/LookupFactory.java +++ b/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/LookupFactory.java @@ -20,7 +20,7 @@ import com.alibaba.nacos.common.utils.StringUtils; import com.alibaba.nacos.core.cluster.MemberLookup; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.Loggers; import java.io.File; diff --git a/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/StandaloneMemberLookup.java b/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/StandaloneMemberLookup.java index 65ffecab6b2..a5d13254cf5 100644 --- a/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/StandaloneMemberLookup.java +++ b/core/src/main/java/com/alibaba/nacos/core/cluster/lookup/StandaloneMemberLookup.java @@ -18,8 +18,8 @@ import com.alibaba.nacos.core.cluster.AbstractMemberLookup; import com.alibaba.nacos.core.cluster.MemberUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.alibaba.nacos.core.utils.InetUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.InetUtils; import java.util.Collections; diff --git a/core/src/main/java/com/alibaba/nacos/core/code/ControllerMethodsCache.java b/core/src/main/java/com/alibaba/nacos/core/code/ControllerMethodsCache.java index 690ba1de486..9ddef611705 100644 --- a/core/src/main/java/com/alibaba/nacos/core/code/ControllerMethodsCache.java +++ b/core/src/main/java/com/alibaba/nacos/core/code/ControllerMethodsCache.java @@ -45,7 +45,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import static com.alibaba.nacos.core.utils.Constants.REQUEST_PATH_SEPARATOR; +import static com.alibaba.nacos.sys.env.Constants.REQUEST_PATH_SEPARATOR; + /** * Method cache. diff --git a/core/src/main/java/com/alibaba/nacos/core/code/LoggingSpringApplicationRunListener.java b/core/src/main/java/com/alibaba/nacos/core/code/LoggingSpringApplicationRunListener.java index 37b052f87ed..780d8e6fbba 100644 --- a/core/src/main/java/com/alibaba/nacos/core/code/LoggingSpringApplicationRunListener.java +++ b/core/src/main/java/com/alibaba/nacos/core/code/LoggingSpringApplicationRunListener.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.core.code; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; diff --git a/core/src/main/java/com/alibaba/nacos/core/code/StandaloneProfileApplicationListener.java b/core/src/main/java/com/alibaba/nacos/core/code/StandaloneProfileApplicationListener.java index 10d7338947a..e741db0e459 100644 --- a/core/src/main/java/com/alibaba/nacos/core/code/StandaloneProfileApplicationListener.java +++ b/core/src/main/java/com/alibaba/nacos/core/code/StandaloneProfileApplicationListener.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.core.code; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent; @@ -27,8 +27,8 @@ import java.util.Arrays; -import static com.alibaba.nacos.core.utils.Constants.STANDALONE_MODE_PROPERTY_NAME; -import static com.alibaba.nacos.core.utils.Constants.STANDALONE_SPRING_PROFILE; +import static com.alibaba.nacos.sys.env.Constants.STANDALONE_MODE_PROPERTY_NAME; +import static com.alibaba.nacos.sys.env.Constants.STANDALONE_SPRING_PROFILE; /** * Standalone {@link Profile} {@link ApplicationListener} for {@link ApplicationEnvironmentPreparedEvent}. diff --git a/core/src/main/java/com/alibaba/nacos/core/code/StartingSpringApplicationRunListener.java b/core/src/main/java/com/alibaba/nacos/core/code/StartingSpringApplicationRunListener.java index 0b8c69777fa..e666d1a6bcb 100644 --- a/core/src/main/java/com/alibaba/nacos/core/code/StartingSpringApplicationRunListener.java +++ b/core/src/main/java/com/alibaba/nacos/core/code/StartingSpringApplicationRunListener.java @@ -21,10 +21,10 @@ import com.alibaba.nacos.common.executor.ThreadPoolManager; import com.alibaba.nacos.common.http.HttpClientManager; import com.alibaba.nacos.common.notify.NotifyCenter; -import com.alibaba.nacos.core.file.WatchFileCenter; -import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.alibaba.nacos.core.utils.DiskUtils; -import com.alibaba.nacos.core.utils.InetUtils; +import com.alibaba.nacos.sys.file.WatchFileCenter; +import com.alibaba.nacos.sys.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.DiskUtils; +import com.alibaba.nacos.sys.utils.InetUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; diff --git a/core/src/main/java/com/alibaba/nacos/core/controller/NacosClusterController.java b/core/src/main/java/com/alibaba/nacos/core/controller/NacosClusterController.java index fc54d67a6cb..50f3a02e5a6 100644 --- a/core/src/main/java/com/alibaba/nacos/core/controller/NacosClusterController.java +++ b/core/src/main/java/com/alibaba/nacos/core/controller/NacosClusterController.java @@ -29,7 +29,7 @@ import com.alibaba.nacos.core.cluster.MemberUtils; import com.alibaba.nacos.core.cluster.NodeState; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.Commons; import com.alibaba.nacos.core.utils.GenericType; import com.alibaba.nacos.core.utils.Loggers; diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/ProtocolManager.java b/core/src/main/java/com/alibaba/nacos/core/distributed/ProtocolManager.java index bf2729027e4..0c434cf4435 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/ProtocolManager.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/ProtocolManager.java @@ -26,7 +26,7 @@ import com.alibaba.nacos.core.cluster.MemberMetaDataConstants; import com.alibaba.nacos.core.cluster.MemberUtils; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.ClassUtils; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.annotation.Autowired; diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/distro/task/load/DistroLoadDataTask.java b/core/src/main/java/com/alibaba/nacos/core/distributed/distro/task/load/DistroLoadDataTask.java index b919b6d703d..35f0ec7aedc 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/distro/task/load/DistroLoadDataTask.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/distro/task/load/DistroLoadDataTask.java @@ -109,7 +109,7 @@ private boolean loadAllDataSnapshotFromRemote(String resourceType) { return true; } } catch (Exception e) { - Loggers.DISTRO.error("[DISTRO-INIT] load snapshot {} from {} failed.", resourceType, each.getAddress()); + Loggers.DISTRO.error("[DISTRO-INIT] load snapshot {} from {} failed.", resourceType, each.getAddress(), e); } } return false; diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/id/SnowFlowerIdGenerator.java b/core/src/main/java/com/alibaba/nacos/core/distributed/id/SnowFlowerIdGenerator.java index 7f483e987d2..b8c38e1e317 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/id/SnowFlowerIdGenerator.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/id/SnowFlowerIdGenerator.java @@ -17,7 +17,7 @@ package com.alibaba.nacos.core.distributed.id; import com.alibaba.nacos.consistency.IdGenerator; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.google.common.base.Preconditions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/JRaftServer.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/JRaftServer.java index e3073e421a8..8de374d0689 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/JRaftServer.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/JRaftServer.java @@ -39,7 +39,7 @@ import com.alibaba.nacos.core.distributed.raft.utils.RaftExecutor; import com.alibaba.nacos.core.distributed.raft.utils.RaftOptionsBuilder; import com.alibaba.nacos.core.monitor.MetricsMonitor; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.Loggers; import com.alipay.sofa.jraft.CliService; import com.alipay.sofa.jraft.Node; diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/JRaftUtils.java b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/JRaftUtils.java index c672f6b36ae..02fb26bbf21 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/JRaftUtils.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/raft/utils/JRaftUtils.java @@ -25,9 +25,9 @@ import com.alibaba.nacos.core.distributed.raft.JRaftServer; import com.alibaba.nacos.core.distributed.raft.processor.NacosGetRequestProcessor; import com.alibaba.nacos.core.distributed.raft.processor.NacosLogProcessor; -import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.alibaba.nacos.core.utils.DiskUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.Loggers; +import com.alibaba.nacos.sys.utils.DiskUtils; import com.alipay.sofa.jraft.CliService; import com.alipay.sofa.jraft.RouteTable; import com.alipay.sofa.jraft.Status; diff --git a/core/src/main/java/com/alibaba/nacos/core/utils/PropertyUtil.java b/core/src/main/java/com/alibaba/nacos/core/utils/PropertyUtil.java deleted file mode 100644 index cb95202e01f..00000000000 --- a/core/src/main/java/com/alibaba/nacos/core/utils/PropertyUtil.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright 1999-2018 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.alibaba.nacos.core.utils; - -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.FileInputStream; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - -/** - * operation property. - * - * @author Nacos - */ -public class PropertyUtil { - - private static final Logger LOGGER = LoggerFactory.getLogger(PropertyUtil.class); - - private static Properties properties = new Properties(); - - static { - InputStream inputStream = null; - try { - String baseDir = System.getProperty("nacos.home"); - if (StringUtils.isNotBlank(baseDir)) { - inputStream = new FileInputStream(baseDir + "/conf/application.properties"); - } else { - inputStream = PropertyUtil.class.getResourceAsStream("/application.properties"); - } - properties.load(inputStream); - } catch (Exception e) { - LOGGER.error("read property file error:" + e); - } finally { - IOUtils.closeQuietly(inputStream); - } - } - - public static String getProperty(String key) { - return properties.getProperty(key); - } - - public static String getProperty(String key, String defaultValue) { - return properties.getProperty(key, defaultValue); - } - - public static List getPropertyList(String key) { - List valueList = new ArrayList<>(); - - for (int i = 0; i < Integer.MAX_VALUE; i++) { - String value = properties.getProperty(key + "[" + i + "]"); - if (StringUtils.isBlank(value)) { - break; - } - - valueList.add(value); - } - - return valueList; - } - -} diff --git a/core/src/main/java/com/alibaba/nacos/core/utils/WebUtils.java b/core/src/main/java/com/alibaba/nacos/core/utils/WebUtils.java index ae2874e5eb1..e8d89917c23 100644 --- a/core/src/main/java/com/alibaba/nacos/core/utils/WebUtils.java +++ b/core/src/main/java/com/alibaba/nacos/core/utils/WebUtils.java @@ -20,6 +20,7 @@ import com.alibaba.nacos.common.http.HttpUtils; import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.model.RestResultUtils; +import com.alibaba.nacos.sys.utils.DiskUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.web.context.request.async.DeferredResult; import org.springframework.web.multipart.MultipartFile; diff --git a/core/src/main/resources/META-INF/logback/nacos.xml b/core/src/main/resources/META-INF/logback/nacos.xml index 9bbbf7aecf2..68b327681cf 100644 --- a/core/src/main/resources/META-INF/logback/nacos.xml +++ b/core/src/main/resources/META-INF/logback/nacos.xml @@ -205,7 +205,7 @@ - + diff --git a/core/src/main/resources/META-INF/spring.factories b/core/src/main/resources/META-INF/spring.factories index eb53776346a..c63c723f268 100644 --- a/core/src/main/resources/META-INF/spring.factories +++ b/core/src/main/resources/META-INF/spring.factories @@ -1,15 +1,6 @@ -# ApplicationContextInitializer -org.springframework.context.ApplicationContextInitializer=\ - com.alibaba.nacos.core.utils.ApplicationUtils - # ApplicationListener org.springframework.context.ApplicationListener=\ com.alibaba.nacos.core.code.StandaloneProfileApplicationListener - -# EnvironmentPostProcessor -org.springframework.boot.env.EnvironmentPostProcessor=\ -com.alibaba.nacos.core.env.NacosDefaultPropertySourceEnvironmentPostProcessor - # SpringApplicationRunListener org.springframework.boot.SpringApplicationRunListener=\ com.alibaba.nacos.core.code.LoggingSpringApplicationRunListener,\ diff --git a/core/src/test/java/com/alibaba/nacos/core/listener/StandaloneProfileApplicationListenerTest.java b/core/src/test/java/com/alibaba/nacos/core/listener/StandaloneProfileApplicationListenerTest.java index d82703dcc21..ebf12f34765 100644 --- a/core/src/test/java/com/alibaba/nacos/core/listener/StandaloneProfileApplicationListenerTest.java +++ b/core/src/test/java/com/alibaba/nacos/core/listener/StandaloneProfileApplicationListenerTest.java @@ -27,7 +27,7 @@ import org.springframework.core.env.Environment; import org.springframework.test.context.junit4.SpringRunner; -import static com.alibaba.nacos.core.utils.Constants.STANDALONE_SPRING_PROFILE; +import static com.alibaba.nacos.sys.env.Constants.STANDALONE_SPRING_PROFILE; /** * {@link StandaloneProfileApplicationListener} Test. diff --git a/core/src/test/java/com/alibaba/nacos/core/utils/SystemUtilsTest.java b/core/src/test/java/com/alibaba/nacos/core/utils/SystemUtilsTest.java index a60c826c2f0..5f6843d7ae0 100644 --- a/core/src/test/java/com/alibaba/nacos/core/utils/SystemUtilsTest.java +++ b/core/src/test/java/com/alibaba/nacos/core/utils/SystemUtilsTest.java @@ -16,6 +16,7 @@ package com.alibaba.nacos.core.utils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.apache.commons.io.FileUtils; import org.junit.Assert; import org.junit.BeforeClass; @@ -26,8 +27,8 @@ import java.util.List; import java.util.Random; -import static com.alibaba.nacos.core.utils.Constants.PREFER_HOSTNAME_OVER_IP_PROPERTY_NAME; -import static com.alibaba.nacos.core.utils.Constants.STANDALONE_MODE_PROPERTY_NAME; +import static com.alibaba.nacos.sys.env.Constants.PREFER_HOSTNAME_OVER_IP_PROPERTY_NAME; +import static com.alibaba.nacos.sys.env.Constants.STANDALONE_MODE_PROPERTY_NAME; /** * {@link ApplicationUtils} Test. diff --git a/distribution/conf/nacos-logback.xml b/distribution/conf/nacos-logback.xml index 3779fbc66a8..b4a731117ff 100644 --- a/distribution/conf/nacos-logback.xml +++ b/distribution/conf/nacos-logback.xml @@ -624,7 +624,7 @@ - + diff --git a/naming/src/main/java/com/alibaba/nacos/naming/cluster/ServerListManager.java b/naming/src/main/java/com/alibaba/nacos/naming/cluster/ServerListManager.java index 5fe4fe38ccd..251e8ea7ea6 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/cluster/ServerListManager.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/cluster/ServerListManager.java @@ -24,7 +24,7 @@ import com.alibaba.nacos.core.cluster.MemberMetaDataConstants; import com.alibaba.nacos.core.cluster.NodeState; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeer; import com.alibaba.nacos.naming.misc.GlobalExecutor; import com.alibaba.nacos.naming.misc.Loggers; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java index 7f679fec2af..26cfac16df7 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImpl.java @@ -19,7 +19,6 @@ import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.common.utils.Objects; -import com.alibaba.nacos.core.utils.ApplicationUtils; import com.alibaba.nacos.naming.cluster.ServerStatus; import com.alibaba.nacos.naming.cluster.transport.Serializer; import com.alibaba.nacos.consistency.DataOperation; @@ -28,16 +27,10 @@ import com.alibaba.nacos.naming.consistency.RecordListener; import com.alibaba.nacos.naming.consistency.ephemeral.EphemeralConsistencyService; import com.alibaba.nacos.naming.consistency.ephemeral.distro.combined.DistroHttpCombinedKey; -import com.alibaba.nacos.naming.consistency.ephemeral.distro.combined.DistroHttpCombinedKeyTaskFailedHandler; -import com.alibaba.nacos.naming.consistency.ephemeral.distro.combined.DistroHttpDelayTaskProcessor; -import com.alibaba.nacos.naming.consistency.ephemeral.distro.component.DistroDataStorageImpl; -import com.alibaba.nacos.naming.consistency.ephemeral.distro.component.DistroHttpAgent; import com.alibaba.nacos.core.distributed.distro.DistroProtocol; -import com.alibaba.nacos.core.distributed.distro.component.DistroComponentHolder; import com.alibaba.nacos.core.distributed.distro.component.DistroDataProcessor; import com.alibaba.nacos.core.distributed.distro.entity.DistroData; import com.alibaba.nacos.core.distributed.distro.entity.DistroKey; -import com.alibaba.nacos.core.distributed.distro.task.DistroTaskEngineHolder; import com.alibaba.nacos.naming.core.DistroMapper; import com.alibaba.nacos.naming.core.Instances; import com.alibaba.nacos.naming.core.Service; @@ -102,20 +95,6 @@ public DistroConsistencyServiceImpl(DistroMapper distroMapper, DataStore dataSto this.switchDomain = switchDomain; this.globalConfig = globalConfig; this.distroProtocol = distroProtocol; - registerDistroComponent(); - } - - private void registerDistroComponent() { - DistroComponentHolder componentHolder = ApplicationUtils.getBean(DistroComponentHolder.class); - DistroTaskEngineHolder taskEngineHolder = ApplicationUtils.getBean(DistroTaskEngineHolder.class); - componentHolder.registerDataStorage(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, - new DistroDataStorageImpl(dataStore, distroMapper)); - componentHolder.registerTransportAgent(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, new DistroHttpAgent()); - componentHolder.registerFailedTaskHandler(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, - new DistroHttpCombinedKeyTaskFailedHandler(globalConfig, taskEngineHolder)); - taskEngineHolder.registerNacosTaskProcessor(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, - new DistroHttpDelayTaskProcessor(globalConfig, taskEngineHolder)); - componentHolder.registerDataProcessor(this); } @PostConstruct diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpData.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpData.java index 7f22ed4d379..314770313af 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpData.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpData.java @@ -33,8 +33,8 @@ public class DistroHttpData extends DistroData { private Object deserializedContent; - public DistroHttpData(DistroKey distroKey, byte[] content, Object deserializedContent) { - super(distroKey, content); + public DistroHttpData(DistroKey distroKey, Object deserializedContent) { + setDistroKey(distroKey); this.deserializedContent = deserializedContent; } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpRegistry.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpRegistry.java new file mode 100644 index 00000000000..16c81fdab9a --- /dev/null +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroHttpRegistry.java @@ -0,0 +1,77 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.nacos.naming.consistency.ephemeral.distro; + +import com.alibaba.nacos.core.distributed.distro.component.DistroComponentHolder; +import com.alibaba.nacos.core.distributed.distro.task.DistroTaskEngineHolder; +import com.alibaba.nacos.naming.consistency.KeyBuilder; +import com.alibaba.nacos.naming.consistency.ephemeral.distro.combined.DistroHttpCombinedKeyTaskFailedHandler; +import com.alibaba.nacos.naming.consistency.ephemeral.distro.combined.DistroHttpDelayTaskProcessor; +import com.alibaba.nacos.naming.consistency.ephemeral.distro.component.DistroDataStorageImpl; +import com.alibaba.nacos.naming.consistency.ephemeral.distro.component.DistroHttpAgent; +import com.alibaba.nacos.naming.core.DistroMapper; +import com.alibaba.nacos.naming.misc.GlobalConfig; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * Distro http registry. + * + * @author xiweng.yy + */ +@Component +public class DistroHttpRegistry { + + private final DistroComponentHolder componentHolder; + + private final DistroTaskEngineHolder taskEngineHolder; + + private final DataStore dataStore; + + private final DistroMapper distroMapper; + + private final GlobalConfig globalConfig; + + private final DistroConsistencyServiceImpl consistencyService; + + public DistroHttpRegistry(DistroComponentHolder componentHolder, DistroTaskEngineHolder taskEngineHolder, + DataStore dataStore, DistroMapper distroMapper, GlobalConfig globalConfig, + DistroConsistencyServiceImpl consistencyService) { + this.componentHolder = componentHolder; + this.taskEngineHolder = taskEngineHolder; + this.dataStore = dataStore; + this.distroMapper = distroMapper; + this.globalConfig = globalConfig; + this.consistencyService = consistencyService; + } + + /** + * Register necessary component to distro protocol for HTTP implement. + */ + @PostConstruct + public void doRegister() { + componentHolder.registerDataStorage(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, + new DistroDataStorageImpl(dataStore, distroMapper)); + componentHolder.registerTransportAgent(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, new DistroHttpAgent()); + componentHolder.registerFailedTaskHandler(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, + new DistroHttpCombinedKeyTaskFailedHandler(globalConfig, taskEngineHolder)); + taskEngineHolder.registerNacosTaskProcessor(KeyBuilder.INSTANCE_LIST_KEY_PREFIX, + new DistroHttpDelayTaskProcessor(globalConfig, taskEngineHolder)); + componentHolder.registerDataProcessor(consistencyService); + } +} diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/component/DistroDataStorageImpl.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/component/DistroDataStorageImpl.java index 111b5065bbc..645229588fe 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/component/DistroDataStorageImpl.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/component/DistroDataStorageImpl.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.naming.consistency.ephemeral.distro.component; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.cluster.transport.Serializer; import com.alibaba.nacos.naming.consistency.Datum; import com.alibaba.nacos.naming.consistency.KeyBuilder; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftCore.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftCore.java index e9d4095914a..bf82aa17177 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftCore.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftCore.java @@ -18,11 +18,13 @@ import com.alibaba.nacos.common.executor.ExecutorFactory; import com.alibaba.nacos.common.executor.NameThreadFactory; +import com.alibaba.nacos.common.http.Callback; +import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.utils.JacksonUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; +import com.alibaba.nacos.consistency.DataOperation; import com.alibaba.nacos.core.utils.ClassUtils; import com.alibaba.nacos.naming.NamingApp; -import com.alibaba.nacos.consistency.DataOperation; import com.alibaba.nacos.naming.consistency.Datum; import com.alibaba.nacos.naming.consistency.KeyBuilder; import com.alibaba.nacos.naming.consistency.RecordListener; @@ -41,8 +43,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import com.ning.http.client.AsyncCompletionHandler; -import com.ning.http.client.Response; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.javatuples.Pair; @@ -55,7 +55,6 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; import java.net.URLDecoder; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; @@ -223,25 +222,28 @@ public void signalPublish(String key, Record value) throws Exception { continue; } final String url = buildUrl(server, API_ON_PUB); - HttpClient.asyncHttpPostLarge(url, Arrays.asList("key=" + key), content, - new AsyncCompletionHandler() { - @Override - public Integer onCompleted(Response response) throws Exception { - if (response.getStatusCode() != HttpURLConnection.HTTP_OK) { - Loggers.RAFT - .warn("[RAFT] failed to publish data to peer, datumId={}, peer={}, http code={}", - datum.key, server, response.getStatusCode()); - return 1; - } - latch.countDown(); - return 0; - } - - @Override - public STATE onContentWriteCompleted() { - return STATE.CONTINUE; - } - }); + HttpClient.asyncHttpPostLarge(url, Arrays.asList("key", key), content, new Callback() { + @Override + public void onReceive(RestResult result) { + if (!result.ok()) { + Loggers.RAFT + .warn("[RAFT] failed to publish data to peer, datumId={}, peer={}, http code={}", + datum.key, server, result.getCode()); + return; + } + latch.countDown(); + } + + @Override + public void onError(Throwable throwable) { + Loggers.RAFT.error("[RAFT] failed to publish data to peer", throwable); + } + + @Override + public void onCancel() { + + } + }); } @@ -287,21 +289,29 @@ public void signalDelete(final String key) throws Exception { for (final String server : peers.allServersWithoutMySelf()) { String url = buildUrl(server, API_ON_DEL); - HttpClient.asyncHttpDeleteLarge(url, null, json.toString(), new AsyncCompletionHandler() { + HttpClient.asyncHttpDeleteLarge(url, null, json.toString(), new Callback() { @Override - public Integer onCompleted(Response response) throws Exception { - if (response.getStatusCode() != HttpURLConnection.HTTP_OK) { + public void onReceive(RestResult result) { + if (!result.ok()) { Loggers.RAFT .warn("[RAFT] failed to delete data from peer, datumId={}, peer={}, http code={}", - key, server, response.getStatusCode()); - return 1; + key, server, result.getCode()); + return; } RaftPeer local = peers.local(); local.resetLeaderDue(); - - return 0; + } + + @Override + public void onError(Throwable throwable) { + Loggers.RAFT.error("[RAFT] failed to delete data from peer", throwable); + } + + @Override + public void onCancel() { + } }); } @@ -458,22 +468,30 @@ private void sendVote() { for (final String server : peers.allServersWithoutMySelf()) { final String url = buildUrl(server, API_VOTE); try { - HttpClient.asyncHttpPost(url, null, params, new AsyncCompletionHandler() { + HttpClient.asyncHttpPost(url, null, params, new Callback() { @Override - public Integer onCompleted(Response response) throws Exception { - if (response.getStatusCode() != HttpURLConnection.HTTP_OK) { - Loggers.RAFT - .error("NACOS-RAFT vote failed: {}, url: {}", response.getResponseBody(), url); - return 1; + public void onReceive(RestResult result) { + if (!result.ok()) { + Loggers.RAFT.error("NACOS-RAFT vote failed: {}, url: {}", result.getCode(), url); + return; } - RaftPeer peer = JacksonUtils.toObj(response.getResponseBody(), RaftPeer.class); + RaftPeer peer = JacksonUtils.toObj(result.getData(), RaftPeer.class); Loggers.RAFT.info("received approve from peer: {}", JacksonUtils.toJson(peer)); peers.decideLeader(peer); - return 0; + } + + @Override + public void onError(Throwable throwable) { + Loggers.RAFT.error("error while sending vote to server: {}", server, throwable); + } + + @Override + public void onCancel() { + } }); } catch (Exception e) { @@ -605,28 +623,32 @@ private void sendBeat() throws IOException, InterruptedException { if (Loggers.RAFT.isDebugEnabled()) { Loggers.RAFT.debug("send beat to server " + server); } - HttpClient.asyncHttpPostLarge(url, null, compressedBytes, new AsyncCompletionHandler() { + HttpClient.asyncHttpPostLarge(url, null, compressedBytes, new Callback() { @Override - public Integer onCompleted(Response response) throws Exception { - if (response.getStatusCode() != HttpURLConnection.HTTP_OK) { - Loggers.RAFT.error("NACOS-RAFT beat failed: {}, peer: {}", response.getResponseBody(), - server); + public void onReceive(RestResult result) { + if (!result.ok()) { + Loggers.RAFT.error("NACOS-RAFT beat failed: {}, peer: {}", result.getCode(), server); MetricsMonitor.getLeaderSendBeatFailedException().increment(); - return 1; + return; } - peers.update(JacksonUtils.toObj(response.getResponseBody(), RaftPeer.class)); + peers.update(JacksonUtils.toObj(result.getData(), RaftPeer.class)); if (Loggers.RAFT.isDebugEnabled()) { Loggers.RAFT.debug("receive beat response from: {}", url); } - return 0; } @Override - public void onThrowable(Throwable t) { - Loggers.RAFT.error("NACOS-RAFT error while sending heart-beat to peer: {} {}", server, t); + public void onError(Throwable throwable) { + Loggers.RAFT.error("NACOS-RAFT error while sending heart-beat to peer: {} {}", server, + throwable); MetricsMonitor.getLeaderSendBeatFailedException().increment(); } + + @Override + public void onCancel() { + + } }); } catch (Exception e) { Loggers.RAFT.error("error while sending heart-beat to peer: {} {}", server, e); @@ -746,15 +768,15 @@ public RaftPeer receivedBeat(JsonNode beat) throws Exception { // update datum entry String url = buildUrl(remote.ip, API_GET) + "?keys=" + URLEncoder.encode(keys, "UTF-8"); - HttpClient.asyncHttpGet(url, null, null, new AsyncCompletionHandler() { + HttpClient.asyncHttpGet(url, null, null, new Callback() { @Override - public Integer onCompleted(Response response) throws Exception { - if (response.getStatusCode() != HttpURLConnection.HTTP_OK) { - return 1; + public void onReceive(RestResult result) { + if (!result.ok()) { + return; } List datumList = JacksonUtils - .toObj(response.getResponseBody(), new TypeReference>() { + .toObj(result.getData(), new TypeReference>() { }); for (JsonNode datumJson : datumList) { @@ -823,9 +845,24 @@ public Integer onCompleted(Response response) throws Exception { OPERATE_LOCK.unlock(); } } - TimeUnit.MILLISECONDS.sleep(200); - return 0; + try { + TimeUnit.MILLISECONDS.sleep(200); + } catch (InterruptedException e) { + Loggers.RAFT.error("[RAFT-BEAT] Interrupted error ", e); + } + return; + } + + @Override + public void onError(Throwable throwable) { + Loggers.RAFT.error("[RAFT-BEAT] failed to sync datum from leader", throwable); } + + @Override + public void onCancel() { + + } + }); batch.clear(); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftPeerSet.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftPeerSet.java index 68c4b794537..569d7c1ae70 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftPeerSet.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftPeerSet.java @@ -16,18 +16,18 @@ package com.alibaba.nacos.naming.consistency.persistent.raft; +import com.alibaba.nacos.common.http.Callback; +import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.notify.NotifyCenter; import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.MemberChangeListener; import com.alibaba.nacos.core.cluster.MembersChangeEvent; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.misc.HttpClient; import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.NetUtils; -import com.ning.http.client.AsyncCompletionHandler; -import com.ning.http.client.Response; import org.apache.commons.collections.SortedBag; import org.apache.commons.collections.bag.TreeBag; import org.apache.commons.lang3.StringUtils; @@ -35,7 +35,6 @@ import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; -import java.net.HttpURLConnection; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; @@ -219,20 +218,28 @@ public RaftPeer makeLeader(RaftPeer candidate) { if (!Objects.equals(peer, candidate) && peer.state == RaftPeer.State.LEADER) { try { String url = RaftCore.buildUrl(peer.ip, RaftCore.API_GET_PEER); - HttpClient.asyncHttpGet(url, null, params, new AsyncCompletionHandler() { + HttpClient.asyncHttpGet(url, null, params, new Callback() { @Override - public Integer onCompleted(Response response) throws Exception { - if (response.getStatusCode() != HttpURLConnection.HTTP_OK) { + public void onReceive(RestResult result) { + if (!result.ok()) { Loggers.RAFT - .error("[NACOS-RAFT] get peer failed: {}, peer: {}", response.getResponseBody(), + .error("[NACOS-RAFT] get peer failed: {}, peer: {}", result.getCode(), peer.ip); peer.state = RaftPeer.State.FOLLOWER; - return 1; + return; } - - update(JacksonUtils.toObj(response.getResponseBody(), RaftPeer.class)); - - return 0; + + update(JacksonUtils.toObj(result.getData(), RaftPeer.class)); + } + + @Override + public void onError(Throwable throwable) { + + } + + @Override + public void onCancel() { + } }); } catch (Exception e) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftProxy.java b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftProxy.java index 50aac9bf202..3a427afe7b3 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftProxy.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftProxy.java @@ -16,13 +16,13 @@ package com.alibaba.nacos.naming.consistency.persistent.raft; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; +import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.naming.misc.HttpClient; import com.alibaba.nacos.naming.misc.UtilsAndCommons; import org.springframework.http.HttpMethod; import org.springframework.stereotype.Component; -import java.net.HttpURLConnection; import java.util.Map; /** @@ -48,9 +48,9 @@ public void proxyGet(String server, String api, Map params) thro } String url = "http://" + server + ApplicationUtils.getContextPath() + api; - HttpClient.HttpResult result = HttpClient.httpGet(url, null, params); - if (result.code != HttpURLConnection.HTTP_OK) { - throw new IllegalStateException("leader failed, caused by: " + result.content); + RestResult result = HttpClient.httpGet(url, null, params); + if (!result.ok()) { + throw new IllegalStateException("leader failed, caused by: " + result.getMessage()); } } @@ -69,7 +69,7 @@ public void proxy(String server, String api, Map params, HttpMet server = server + UtilsAndCommons.IP_PORT_SPLITER + ApplicationUtils.getPort(); } String url = "http://" + server + ApplicationUtils.getContextPath() + api; - HttpClient.HttpResult result; + RestResult result; switch (method) { case GET: result = HttpClient.httpGet(url, null, params); @@ -84,8 +84,8 @@ public void proxy(String server, String api, Map params, HttpMet throw new RuntimeException("unsupported method:" + method); } - if (result.code != HttpURLConnection.HTTP_OK) { - throw new IllegalStateException("leader failed, caused by: " + result.content); + if (!result.ok()) { + throw new IllegalStateException("leader failed, caused by: " + result.getMessage()); } } @@ -106,9 +106,9 @@ public void proxyPostLarge(String server, String api, String content, Map result = HttpClient.httpPostLarge(url, headers, content); + if (!result.ok()) { + throw new IllegalStateException("leader failed, caused by: " + result.getMessage()); } } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/ApiController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/ApiController.java index bc0e915afee..dfce951277f 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/ApiController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/ApiController.java @@ -88,8 +88,8 @@ public ObjectNode allDomNames(HttpServletRequest request) throws Exception { } if (CollectionUtils.isEmpty(domSet)) { - result.put("doms", JacksonUtils.transferToJsonNode(new HashSet<>())); result.put("count", 0); + result.set("doms", JacksonUtils.transferToJsonNode(new HashSet<>())); return result; } @@ -99,8 +99,8 @@ public ObjectNode allDomNames(HttpServletRequest request) throws Exception { } } - result.put("doms", JacksonUtils.transferToJsonNode(doms)); result.put("count", doms.size()); + result.set("doms", JacksonUtils.transferToJsonNode(doms)); return result; } @@ -116,8 +116,8 @@ public ObjectNode allDomNames(HttpServletRequest request) throws Exception { count += doms.get(namespaceId).size(); } - result.put("doms", JacksonUtils.transferToJsonNode(doms)); result.put("count", count); + result.set("doms", JacksonUtils.transferToJsonNode(doms)); return result; } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/DistroController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/DistroController.java index b1e89d92b28..7052b71a1fc 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/DistroController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/DistroController.java @@ -84,8 +84,7 @@ public ResponseEntity onSyncDatum(@RequestBody Map> dat .isDefaultInstanceEphemeral()) { serviceManager.createEmptyService(namespaceId, serviceName, true); } - DistroHttpData distroHttpData = new DistroHttpData(createDistroKey(entry.getKey()), null, - entry.getValue()); + DistroHttpData distroHttpData = new DistroHttpData(createDistroKey(entry.getKey()), entry.getValue()); distroProtocol.onReceive(distroHttpData); } } @@ -101,7 +100,7 @@ public ResponseEntity onSyncDatum(@RequestBody Map> dat */ @PutMapping("/checksum") public ResponseEntity syncChecksum(@RequestParam String source, @RequestBody Map dataMap) { - DistroHttpData distroHttpData = new DistroHttpData(createDistroKey(source), null, dataMap); + DistroHttpData distroHttpData = new DistroHttpData(createDistroKey(source), dataMap); distroProtocol.onVerify(distroHttpData); return ResponseEntity.ok("ok"); } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/HealthController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/HealthController.java index 85957f5f4c7..8b0e39faca3 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/HealthController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/HealthController.java @@ -22,7 +22,7 @@ import com.alibaba.nacos.auth.annotation.Secured; import com.alibaba.nacos.auth.common.ActionTypes; import com.alibaba.nacos.common.utils.JacksonUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.core.utils.WebUtils; import com.alibaba.nacos.naming.core.Instance; import com.alibaba.nacos.naming.core.Service; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/InstanceController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/InstanceController.java index 287cb13b23a..5f1ae15a362 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/InstanceController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/InstanceController.java @@ -38,6 +38,7 @@ import com.alibaba.nacos.naming.push.DataSource; import com.alibaba.nacos.naming.push.PushService; import com.alibaba.nacos.naming.web.CanDistro; +import com.alibaba.nacos.naming.web.DistroFilter; import com.alibaba.nacos.naming.web.NamingResourceParser; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -115,9 +116,10 @@ public String getData(PushService.PushClient client) { @Secured(parser = NamingResourceParser.class, action = ActionTypes.WRITE) public String register(HttpServletRequest request) throws Exception { - final String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); final String namespaceId = WebUtils .optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); + final String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); + checkServiceNameFormat(serviceName); final Instance instance = parseInstance(request); @@ -139,6 +141,7 @@ public String deregister(HttpServletRequest request) throws Exception { Instance instance = getIpAddress(request); String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); + checkServiceNameFormat(serviceName); Service service = serviceManager.getService(namespaceId, serviceName); if (service == null) { @@ -161,9 +164,10 @@ public String deregister(HttpServletRequest request) throws Exception { @PutMapping @Secured(parser = NamingResourceParser.class, action = ActionTypes.WRITE) public String update(HttpServletRequest request) throws Exception { - final String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); final String namespaceId = WebUtils .optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); + final String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); + checkServiceNameFormat(serviceName); final Instance instance = parseInstance(request); String agent = WebUtils.getUserAgent(request); @@ -190,8 +194,9 @@ public String update(HttpServletRequest request) throws Exception { @PatchMapping @Secured(parser = NamingResourceParser.class, action = ActionTypes.WRITE) public String patch(HttpServletRequest request) throws Exception { - String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); + String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); + checkServiceNameFormat(serviceName); String ip = WebUtils.required(request, "ip"); String port = WebUtils.required(request, "port"); String cluster = WebUtils.optional(request, CommonParams.CLUSTER_NAME, StringUtils.EMPTY); @@ -242,8 +247,9 @@ public String patch(HttpServletRequest request) throws Exception { public ObjectNode list(HttpServletRequest request) throws Exception { String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); - String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); + checkServiceNameFormat(serviceName); + String agent = WebUtils.getUserAgent(request); String clusters = WebUtils.optional(request, "clusters", StringUtils.EMPTY); String clientIP = WebUtils.optional(request, "clientIP", StringUtils.EMPTY); @@ -274,6 +280,7 @@ public ObjectNode detail(HttpServletRequest request) throws Exception { String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); + checkServiceNameFormat(serviceName); String cluster = WebUtils.optional(request, CommonParams.CLUSTER_NAME, UtilsAndCommons.DEFAULT_CLUSTER_NAME); String ip = WebUtils.required(request, "ip"); int port = Integer.parseInt(WebUtils.required(request, "port")); @@ -301,8 +308,8 @@ public ObjectNode detail(HttpServletRequest request) throws Exception { result.put("clusterName", cluster); result.put("weight", instance.getWeight()); result.put("healthy", instance.isHealthy()); - result.put("metadata", JacksonUtils.transferToJsonNode(instance.getMetadata())); result.put("instanceId", instance.getInstanceId()); + result.set("metadata", JacksonUtils.transferToJsonNode(instance.getMetadata())); return result; } } @@ -344,8 +351,9 @@ public ObjectNode beat(HttpServletRequest request) throws Exception { ip = clientBeat.getIp(); port = clientBeat.getPort(); } - String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); String namespaceId = WebUtils.optional(request, CommonParams.NAMESPACE_ID, Constants.DEFAULT_NAMESPACE_ID); + String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); + checkServiceNameFormat(serviceName); Loggers.SRV_LOG.debug("[CLIENT-BEAT] full arguments: beat: {}, serviceName: {}", clientBeat, serviceName); Instance instance = serviceManager.getInstance(namespaceId, serviceName, clusterName, ip, port); @@ -413,7 +421,7 @@ public ObjectNode listWithHealthStatus(@RequestParam String key) throws NacosExc namespaceId = Constants.DEFAULT_NAMESPACE_ID; serviceName = key; } - + checkServiceNameFormat(serviceName); Service service = serviceManager.getService(namespaceId, serviceName); if (service == null) { @@ -433,6 +441,26 @@ public ObjectNode listWithHealthStatus(@RequestParam String key) throws NacosExc return result; } + /** + * check combineServiceName format. the serviceName can't be blank. some relational logic in {@link + * DistroFilter#doFilter}, it will handle combineServiceName in some case, you should know it. + *

+     * serviceName = "@@"; the length = 0; illegal
+     * serviceName = "group@@"; the length = 1; illegal
+     * serviceName = "@@serviceName"; the length = 2; legal
+     * serviceName = "group@@serviceName"; the length = 2; legal
+     * 
+ * + * @param combineServiceName such as: groupName@@serviceName + */ + private void checkServiceNameFormat(String combineServiceName) { + String[] split = combineServiceName.split(Constants.SERVICE_INFO_SPLITER); + if (split.length <= 1) { + throw new IllegalArgumentException( + "Param 'serviceName' is illegal, it should be format as 'groupName@@serviceName"); + } + } + private Instance parseInstance(HttpServletRequest request) throws Exception { String serviceName = WebUtils.required(request, CommonParams.SERVICE_NAME); @@ -568,7 +596,6 @@ public ObjectNode doSrvIpxt(String namespaceId, String serviceName, String agent result.put("dom", NamingUtils.getServiceName(serviceName)); } - result.put("hosts", JacksonUtils.createEmptyArrayNode()); result.put("name", serviceName); result.put("cacheMillis", cacheMillis); result.put("lastRefTime", System.currentTimeMillis()); @@ -576,7 +603,8 @@ public ObjectNode doSrvIpxt(String namespaceId, String serviceName, String agent result.put("useSpecifiedURL", false); result.put("clusters", clusters); result.put("env", env); - result.put("metadata", JacksonUtils.transferToJsonNode(service.getMetadata())); + result.set("hosts", JacksonUtils.createEmptyArrayNode()); + result.set("metadata", JacksonUtils.transferToJsonNode(service.getMetadata())); return result; } @@ -637,7 +665,7 @@ public ObjectNode doSrvIpxt(String namespaceId, String serviceName, String agent ipObj.put("healthy", entry.getKey()); ipObj.put("marked", instance.isMarked()); ipObj.put("instanceId", instance.getInstanceId()); - ipObj.put("metadata", JacksonUtils.transferToJsonNode(instance.getMetadata())); + ipObj.set("metadata", JacksonUtils.transferToJsonNode(instance.getMetadata())); ipObj.put("enabled", instance.isEnabled()); ipObj.put("weight", instance.getWeight()); ipObj.put("clusterName", instance.getClusterName()); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/controllers/OperatorController.java b/naming/src/main/java/com/alibaba/nacos/naming/controllers/OperatorController.java index f0500924ccc..180c931415f 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/controllers/OperatorController.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/controllers/OperatorController.java @@ -23,7 +23,7 @@ import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.NodeState; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.cluster.ServerListManager; import com.alibaba.nacos.naming.cluster.ServerStatusManager; import com.alibaba.nacos.naming.consistency.persistent.raft.RaftCore; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/DistroMapper.java b/naming/src/main/java/com/alibaba/nacos/naming/core/DistroMapper.java index b5ec07095ea..a4212b5e04c 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/DistroMapper.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/DistroMapper.java @@ -22,7 +22,7 @@ import com.alibaba.nacos.core.cluster.MembersChangeEvent; import com.alibaba.nacos.core.cluster.NodeState; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.misc.Loggers; import com.alibaba.nacos.naming.misc.SwitchDomain; import org.apache.commons.collections.CollectionUtils; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java b/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java index 22095f58a3b..5facf170941 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java @@ -17,7 +17,7 @@ package com.alibaba.nacos.naming.core; import com.alibaba.nacos.common.utils.JacksonUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.common.utils.MD5Utils; import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.naming.consistency.KeyBuilder; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/core/SubscribeManager.java b/naming/src/main/java/com/alibaba/nacos/naming/core/SubscribeManager.java index 1cd1651c15d..e0b445ada7c 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/core/SubscribeManager.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/core/SubscribeManager.java @@ -17,10 +17,11 @@ package com.alibaba.nacos.naming.core; import com.alibaba.nacos.api.naming.CommonParams; +import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.misc.HttpClient; import com.alibaba.nacos.naming.misc.NetUtils; import com.alibaba.nacos.naming.misc.UtilsAndCommons; @@ -31,7 +32,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.net.HttpURLConnection; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -97,13 +97,13 @@ public List getSubscribers(String serviceName, String namespaceId, b continue; } - HttpClient.HttpResult result = HttpClient.httpGet( + RestResult result = HttpClient.httpGet( "http://" + server.getAddress() + ApplicationUtils.getContextPath() + UtilsAndCommons.NACOS_NAMING_CONTEXT + SUBSCRIBER_ON_SYNC_URL, new ArrayList<>(), paramValues); - if (HttpURLConnection.HTTP_OK == result.code) { - Subscribers subscribers = JacksonUtils.toObj(result.content, Subscribers.class); + if (!result.ok()) { + Subscribers subscribers = JacksonUtils.toObj(result.getData(), Subscribers.class); subscriberList.addAll(subscribers.getSubscribers()); } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatCheckTask.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatCheckTask.java index 253e664dcb5..6de0fd0dbce 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatCheckTask.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatCheckTask.java @@ -16,8 +16,10 @@ package com.alibaba.nacos.naming.healthcheck; +import com.alibaba.nacos.common.http.Callback; +import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.utils.JacksonUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.consistency.KeyBuilder; import com.alibaba.nacos.naming.core.DistroMapper; import com.alibaba.nacos.naming.core.Instance; @@ -31,10 +33,7 @@ import com.alibaba.nacos.naming.misc.UtilsAndCommons; import com.alibaba.nacos.naming.push.PushService; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.ning.http.client.AsyncCompletionHandler; -import com.ning.http.client.Response; -import java.net.HttpURLConnection; import java.util.List; /** @@ -140,15 +139,26 @@ private void deleteIp(Instance instance) { + UtilsAndCommons.NACOS_NAMING_CONTEXT + "/instance?" + request.toUrl(); // delete instance asynchronously: - HttpClient.asyncHttpDelete(url, null, null, new AsyncCompletionHandler() { + HttpClient.asyncHttpDelete(url, null, null, new Callback() { @Override - public Object onCompleted(Response response) throws Exception { - if (response.getStatusCode() != HttpURLConnection.HTTP_OK) { + public void onReceive(RestResult result) { + if (!result.ok()) { Loggers.SRV_LOG .error("[IP-DEAD] failed to delete ip automatically, ip: {}, caused {}, resp code: {}", - instance.toJson(), response.getResponseBody(), response.getStatusCode()); + instance.toJson(), result.getMessage(), result.getCode()); } - return null; + } + + @Override + public void onError(Throwable throwable) { + Loggers.SRV_LOG + .error("[IP-DEAD] failed to delete ip automatically, ip: {}, error: {}", instance.toJson(), + throwable); + } + + @Override + public void onCancel() { + } }); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatProcessor.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatProcessor.java index 213c2719880..a2b147b6cf4 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatProcessor.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/ClientBeatProcessor.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.naming.healthcheck; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.core.Cluster; import com.alibaba.nacos.naming.core.Instance; import com.alibaba.nacos.naming.core.Service; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckCommon.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckCommon.java index 41a345fc9c3..ac224b5d0ae 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckCommon.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckCommon.java @@ -16,10 +16,11 @@ package com.alibaba.nacos.naming.healthcheck; +import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.core.cluster.Member; import com.alibaba.nacos.core.cluster.ServerMemberManager; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.core.Cluster; import com.alibaba.nacos.naming.core.DistroMapper; import com.alibaba.nacos.naming.core.Instance; @@ -34,7 +35,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.net.HttpURLConnection; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; @@ -92,11 +92,11 @@ public void init() { JacksonUtils.toJson(list)); } - HttpClient.HttpResult httpResult = HttpClient.httpPost( + RestResult httpResult = HttpClient.httpPost( "http://" + server.getAddress() + ApplicationUtils.getContextPath() + UtilsAndCommons.NACOS_NAMING_CONTEXT + "/api/healthCheckResult", null, params); - if (httpResult.code != HttpURLConnection.HTTP_OK) { + if (!httpResult.ok()) { Loggers.EVT_LOG.warn("[HEALTH-CHECK-SYNC] failed to send result to {}, result: {}", server, JacksonUtils.toJson(list)); } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckTask.java b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckTask.java index 511cc683f06..8599fb8cecc 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckTask.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/healthcheck/HealthCheckTask.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.naming.healthcheck; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.core.Cluster; import com.alibaba.nacos.naming.core.DistroMapper; import com.alibaba.nacos.naming.misc.Loggers; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java index 7ce2daf3eaa..07941e9dd3f 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java @@ -17,49 +17,24 @@ package com.alibaba.nacos.naming.misc; import com.alibaba.nacos.common.constant.HttpHeaderConsts; +import com.alibaba.nacos.common.http.Callback; +import com.alibaba.nacos.common.http.HttpClientConfig; +import com.alibaba.nacos.common.http.client.NacosAsyncRestTemplate; +import com.alibaba.nacos.common.http.client.NacosRestTemplate; +import com.alibaba.nacos.common.http.param.Header; +import com.alibaba.nacos.common.http.param.MediaType; +import com.alibaba.nacos.common.http.param.Query; +import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.utils.HttpMethod; -import com.alibaba.nacos.common.utils.IoUtils; import com.alibaba.nacos.common.utils.VersionUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.ning.http.client.AsyncCompletionHandler; -import com.ning.http.client.AsyncHttpClient; -import com.ning.http.client.AsyncHttpClientConfig; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.http.HeaderElement; -import org.apache.http.HttpEntity; -import org.apache.http.HttpHeaders; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.client.config.RequestConfig; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.methods.HttpPut; -import org.apache.http.entity.ByteArrayEntity; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.StringEntity; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.message.BasicNameValuePair; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.URI; -import java.net.URL; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.concurrent.TimeUnit; -import java.util.zip.GZIPInputStream; /** * Http Client. @@ -72,34 +47,11 @@ public class HttpClient { private static final int CON_TIME_OUT_MILLIS = 5000; - private static AsyncHttpClient asyncHttpClient; + private static final NacosRestTemplate SYNC_NACOS_REST_TEMPLATE = HttpClientManager.getNacosRestTemplate(); - private static CloseableHttpClient postClient; + private static final NacosRestTemplate APACHE_SYNC_NACOS_REST_TEMPLATE = HttpClientManager.getApacheRestTemplate(); - static { - AsyncHttpClientConfig.Builder builder = new AsyncHttpClientConfig.Builder(); - builder.setMaximumConnectionsTotal(-1); - builder.setMaximumConnectionsPerHost(128); - builder.setAllowPoolingConnection(true); - builder.setFollowRedirects(false); - builder.setIdleConnectionTimeoutInMs(TIME_OUT_MILLIS); - builder.setConnectionTimeoutInMs(CON_TIME_OUT_MILLIS); - builder.setCompressionEnabled(true); - builder.setIOThreadMultiplier(1); - builder.setMaxRequestRetry(0); - builder.setUserAgent(UtilsAndCommons.SERVER_VERSION); - - asyncHttpClient = new AsyncHttpClient(builder.build()); - - HttpClientBuilder builder2 = HttpClients.custom(); - builder2.setUserAgent(UtilsAndCommons.SERVER_VERSION); - builder2.setConnectionTimeToLive(CON_TIME_OUT_MILLIS, TimeUnit.MILLISECONDS); - builder2.setMaxConnPerRoute(-1); - builder2.setMaxConnTotal(-1); - builder2.disableAutomaticRetries(); - - postClient = builder2.build(); - } + private static final NacosAsyncRestTemplate ASYNC_REST_TEMPLATE = HttpClientManager.getAsyncRestTemplate(); /** * Request http delete method. @@ -107,11 +59,11 @@ public class HttpClient { * @param url url * @param headers headers * @param paramValues params - * @return {@link HttpResult} as response + * @return {@link RestResult} as response */ - public static HttpResult httpDelete(String url, List headers, Map paramValues) { + public static RestResult httpDelete(String url, List headers, Map paramValues) { return request(url, headers, paramValues, StringUtils.EMPTY, CON_TIME_OUT_MILLIS, TIME_OUT_MILLIS, "UTF-8", - "DELETE"); + HttpMethod.DELETE); } /** @@ -120,11 +72,11 @@ public static HttpResult httpDelete(String url, List headers, Map headers, Map paramValues) { + public static RestResult httpGet(String url, List headers, Map paramValues) { return request(url, headers, paramValues, StringUtils.EMPTY, CON_TIME_OUT_MILLIS, TIME_OUT_MILLIS, "UTF-8", - "GET"); + HttpMethod.GET); } /** @@ -138,39 +90,31 @@ public static HttpResult httpGet(String url, List headers, Map headers, Map paramValues, String body, - int connectTimeout, int readTimeout, String encoding, String method) { - HttpURLConnection conn = null; + public static RestResult request(String url, List headers, Map paramValues, + String body, int connectTimeout, int readTimeout, String encoding, String method) { + Header header = Header.newInstance(); + if (CollectionUtils.isNotEmpty(headers)) { + header.addAll(headers); + } + header.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + header.addParam(HttpHeaderConsts.CLIENT_VERSION_HEADER, VersionUtils.version); + header.addParam(HttpHeaderConsts.USER_AGENT_HEADER, UtilsAndCommons.SERVER_VERSION); + header.addParam(HttpHeaderConsts.REQUEST_SOURCE_HEADER, ApplicationUtils.getLocalAddress()); + header.addParam(HttpHeaderConsts.ACCEPT_CHARSET, encoding); + + HttpClientConfig httpClientConfig = HttpClientConfig.builder().setConTimeOutMillis(connectTimeout) + .setReadTimeOutMillis(readTimeout).build(); + Query query = Query.newInstance().initParams(paramValues); + query.addParam("encoding", "UTF-8"); + query.addParam("nofix", "1"); try { - String encodedContent = encodingParams(paramValues, encoding); - url += StringUtils.isBlank(encodedContent) ? StringUtils.EMPTY : ("?" + encodedContent); - - conn = (HttpURLConnection) new URL(url).openConnection(); - conn.setConnectTimeout(connectTimeout); - conn.setReadTimeout(readTimeout); - conn.setRequestMethod(method); - - setHeaders(conn, headers, encoding); - - if (StringUtils.isNotBlank(body)) { - conn.setDoOutput(true); - byte[] b = body.getBytes(); - conn.setRequestProperty("Content-Length", String.valueOf(b.length)); - conn.getOutputStream().write(b, 0, b.length); - conn.getOutputStream().flush(); - conn.getOutputStream().close(); - } - - conn.connect(); - - return getResult(conn); + return SYNC_NACOS_REST_TEMPLATE + .exchange(url, httpClientConfig, header, query, body, method, String.class); } catch (Exception e) { Loggers.SRV_LOG.warn("Exception while request: {}, caused: {}", url, e); - return new HttpResult(500, e.toString(), Collections.emptyMap()); - } finally { - IoUtils.closeQuietly(conn); + return RestResult.builder().withCode(500).withMsg(e.toString()).build(); } } @@ -180,11 +124,11 @@ public static HttpResult request(String url, List headers, Map headers, Map paramValues, - AsyncCompletionHandler handler) throws Exception { - asyncHttpRequest(url, headers, paramValues, handler, HttpMethod.GET); + Callback callback) throws Exception { + asyncHttpRequest(url, headers, paramValues, callback, HttpMethod.GET); } /** @@ -193,11 +137,11 @@ public static void asyncHttpGet(String url, List headers, Map headers, Map paramValues, - AsyncCompletionHandler handler) throws Exception { - asyncHttpRequest(url, headers, paramValues, handler, HttpMethod.POST); + Callback callback) throws Exception { + asyncHttpRequest(url, headers, paramValues, callback, HttpMethod.POST); } /** @@ -206,11 +150,11 @@ public static void asyncHttpPost(String url, List headers, Map headers, Map paramValues, - AsyncCompletionHandler handler) throws Exception { - asyncHttpRequest(url, headers, paramValues, handler, HttpMethod.DELETE); + Callback callback) throws Exception { + asyncHttpRequest(url, headers, paramValues, callback, HttpMethod.DELETE); } /** @@ -223,124 +167,84 @@ public static void asyncHttpDelete(String url, List headers, Map headers, Map paramValues, - AsyncCompletionHandler handler, String method) throws Exception { - if (!MapUtils.isEmpty(paramValues)) { - String encodedContent = encodingParams(paramValues, "UTF-8"); - url += (null == encodedContent) ? "" : ("?" + encodedContent); - } + Callback callback, String method) throws Exception { - AsyncHttpClient.BoundRequestBuilder builder; + Query query = Query.newInstance().initParams(paramValues); + query.addParam("encoding", "UTF-8"); + query.addParam("nofix", "1"); + + Header header = Header.newInstance(); + if (CollectionUtils.isNotEmpty(headers)) { + header.addAll(headers); + } + header.addParam(HttpHeaderConsts.ACCEPT_CHARSET, "UTF-8"); switch (method) { case HttpMethod.GET: - builder = asyncHttpClient.prepareGet(url); + ASYNC_REST_TEMPLATE.get(url, header, query, String.class, callback); break; case HttpMethod.POST: - builder = asyncHttpClient.preparePost(url); + ASYNC_REST_TEMPLATE.postForm(url, header, paramValues, String.class, callback); break; case HttpMethod.PUT: - builder = asyncHttpClient.preparePut(url); + ASYNC_REST_TEMPLATE.putForm(url, header, paramValues, String.class, callback); break; case HttpMethod.DELETE: - builder = asyncHttpClient.prepareDelete(url); + ASYNC_REST_TEMPLATE.delete(url, header, query, String.class, callback); break; default: throw new RuntimeException("not supported method:" + method); } - - if (!CollectionUtils.isEmpty(headers)) { - for (String header : headers) { - builder.setHeader(header.split("=")[0], header.split("=")[1]); - } - } - - builder.setHeader("Accept-Charset", "UTF-8"); - - if (handler != null) { - builder.execute(handler); - } else { - builder.execute(); - } } /** * Request http post method by async with large body. * - * @param url url - * @param headers headers - * @param content full request content - * @param handler callback after request execute + * @param url url + * @param headers headers + * @param content full request content + * @param callback callback after request execute */ - public static void asyncHttpPostLarge(String url, List headers, String content, - AsyncCompletionHandler handler) throws Exception { - asyncHttpPostLarge(url, headers, content.getBytes(), handler); + public static void asyncHttpPostLarge(String url, List headers, String content, Callback callback) + throws Exception { + asyncHttpPostLarge(url, headers, content.getBytes(), callback); } /** * Request http post method by async with large body. * - * @param url url - * @param headers headers - * @param content full request content - * @param handler callback after request execute + * @param url url + * @param headers headers + * @param content full request content + * @param callback callback after request execute */ - public static void asyncHttpPostLarge(String url, List headers, byte[] content, - AsyncCompletionHandler handler) throws Exception { - AsyncHttpClient.BoundRequestBuilder builder = asyncHttpClient.preparePost(url); - - if (!CollectionUtils.isEmpty(headers)) { - for (String header : headers) { - builder.setHeader(header.split("=")[0], header.split("=")[1]); - } - } - - builder.setBody(content); - - builder.setHeader("Content-Type", "application/json; charset=UTF-8"); - builder.setHeader("Accept-Charset", "UTF-8"); - builder.setHeader("Accept-Encoding", "gzip"); - builder.setHeader("Content-Encoding", "gzip"); - - if (handler != null) { - builder.execute(handler); - } else { - builder.execute(); + public static void asyncHttpPostLarge(String url, List headers, byte[] content, Callback callback) + throws Exception { + Header header = Header.newInstance(); + if (CollectionUtils.isNotEmpty(headers)) { + header.addAll(headers); } + ASYNC_REST_TEMPLATE.post(url, header, Query.EMPTY, content, String.class, callback); } /** * Request http delete method by async with large body. * - * @param url url - * @param headers headers - * @param content full request content - * @param handler callback after request execute + * @param url url + * @param headers headers + * @param content full request content + * @param callback callback after request execute */ - public static void asyncHttpDeleteLarge(String url, List headers, String content, - AsyncCompletionHandler handler) throws Exception { - AsyncHttpClient.BoundRequestBuilder builder = asyncHttpClient.prepareDelete(url); - - if (!CollectionUtils.isEmpty(headers)) { - for (String header : headers) { - builder.setHeader(header.split("=")[0], header.split("=")[1]); - } - } - - builder.setBody(content.getBytes()); - - builder.setHeader("Content-Type", "application/json; charset=UTF-8"); - builder.setHeader("Accept-Charset", "UTF-8"); - builder.setHeader("Accept-Encoding", "gzip"); - builder.setHeader("Content-Encoding", "gzip"); - - if (handler != null) { - builder.execute(handler); - } else { - builder.execute(); + public static void asyncHttpDeleteLarge(String url, List headers, String content, Callback callback) + throws Exception { + Header header = Header.newInstance(); + if (CollectionUtils.isNotEmpty(headers)) { + header.addAll(headers); } + ASYNC_REST_TEMPLATE.delete(url, header, content, String.class, callback); } - public static HttpResult httpPost(String url, List headers, Map paramValues) { + public static RestResult httpPost(String url, List headers, Map paramValues) { return httpPost(url, headers, paramValues, "UTF-8"); } @@ -351,109 +255,40 @@ public static HttpResult httpPost(String url, List headers, Map headers, Map paramValues, + public static RestResult httpPost(String url, List headers, Map paramValues, String encoding) { try { - - HttpPost httpost = new HttpPost(url); - - RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(5000) - .setConnectTimeout(5000).setSocketTimeout(5000).setRedirectsEnabled(true).setMaxRedirects(5) - .build(); - httpost.setConfig(requestConfig); - - List nvps = new ArrayList(); - - for (Map.Entry entry : paramValues.entrySet()) { - nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + Header header = Header.newInstance(); + if (CollectionUtils.isNotEmpty(headers)) { + header.addAll(headers); } + header.addParam(HttpHeaderConsts.ACCEPT_CHARSET, encoding); - httpost.setEntity(new UrlEncodedFormEntity(nvps, encoding)); - HttpResponse response = postClient.execute(httpost); - HttpEntity entity = response.getEntity(); - - String charset = encoding; - if (entity.getContentType() != null) { - - HeaderElement[] headerElements = entity.getContentType().getElements(); - - if (headerElements != null && headerElements.length > 0 && headerElements[0] != null - && headerElements[0].getParameterByName("charset") != null) { - charset = headerElements[0].getParameterByName("charset").getValue(); - } - } - - return new HttpResult(response.getStatusLine().getStatusCode(), - IoUtils.toString(entity.getContent(), charset), Collections.emptyMap()); + HttpClientConfig httpClientConfig = HttpClientConfig.builder().setConTimeOutMillis(5000).setReadTimeOutMillis(5000) + .setConnectionRequestTimeout(5000).setMaxRedirects(5).build(); + return APACHE_SYNC_NACOS_REST_TEMPLATE.postForm(url, httpClientConfig, header, paramValues, String.class); } catch (Throwable e) { - return new HttpResult(500, e.toString(), Collections.emptyMap()); + return RestResult.builder().withCode(500).withMsg(e.toString()).build(); } } /** * Request http put method by async with large body. * - * @param url url - * @param headers headers - * @param content full request content - * @param handler callback after request execute + * @param url url + * @param headers headers + * @param content full request content + * @param callback callback after request execute */ public static void asyncHttpPutLarge(String url, Map headers, byte[] content, - AsyncCompletionHandler handler) throws Exception { - AsyncHttpClient.BoundRequestBuilder builder = asyncHttpClient.preparePut(url); - - if (!headers.isEmpty()) { - for (String headerKey : headers.keySet()) { - builder.setHeader(headerKey, headers.get(headerKey)); - } - } - - builder.setBody(content); - - builder.setHeader("Content-Type", "application/json; charset=UTF-8"); - builder.setHeader("Accept-Charset", "UTF-8"); - builder.setHeader("Accept-Encoding", "gzip"); - builder.setHeader("Content-Encoding", "gzip"); - - if (handler != null) { - builder.execute(handler); - } else { - builder.execute(); - } - } - - /** - * Request http get method by async with large body. - * - * @param url url - * @param headers headers - * @param content full request content - * @param handler callback after request execute - */ - public static void asyncHttpGetLarge(String url, Map headers, byte[] content, - AsyncCompletionHandler handler) throws Exception { - AsyncHttpClient.BoundRequestBuilder builder = asyncHttpClient.prepareGet(url); - - if (!headers.isEmpty()) { - for (String headerKey : headers.keySet()) { - builder.setHeader(headerKey, headers.get(headerKey)); - } - } - - builder.setBody(content); - - builder.setHeader("Content-Type", "application/json; charset=UTF-8"); - builder.setHeader("Accept-Charset", "UTF-8"); - builder.setHeader("Accept-Encoding", "gzip"); - builder.setHeader("Content-Encoding", "gzip"); - - if (handler != null) { - builder.execute(handler); - } else { - builder.execute(); + Callback callback) throws Exception { + Header header = Header.newInstance(); + if (MapUtils.isNotEmpty(headers)) { + header.addAll(headers); } + ASYNC_REST_TEMPLATE.put(url, header, Query.EMPTY, content, String.class, callback); } /** @@ -462,29 +297,17 @@ public static void asyncHttpGetLarge(String url, Map headers, by * @param url url * @param headers headers * @param content full request content - * @return {@link HttpResult} as response + * @return {@link RestResult} as response */ - public static HttpResult httpPutLarge(String url, Map headers, byte[] content) { - HttpClientBuilder builder = HttpClients.custom().setUserAgent(UtilsAndCommons.SERVER_VERSION) - .setConnectionTimeToLive(500, TimeUnit.MILLISECONDS); - try (CloseableHttpClient httpClient = builder.build();) { - - HttpPut httpPut = new HttpPut(url); - for (Map.Entry entry : headers.entrySet()) { - httpPut.setHeader(entry.getKey(), entry.getValue()); - } - httpPut.setEntity(new ByteArrayEntity(content, ContentType.APPLICATION_JSON)); - - HttpResponse response = httpClient.execute(httpPut); - HttpEntity entity = response.getEntity(); - - HeaderElement[] headerElements = entity.getContentType().getElements(); - String charset = headerElements[0].getParameterByName("charset").getValue(); - - return new HttpResult(response.getStatusLine().getStatusCode(), - IoUtils.toString(entity.getContent(), charset), Collections.emptyMap()); + public static RestResult httpPutLarge(String url, Map headers, byte[] content) { + Header header = Header.newInstance(); + if (MapUtils.isNotEmpty(headers)) { + header.addAll(headers); + } + try { + return APACHE_SYNC_NACOS_REST_TEMPLATE.put(url, header, Query.EMPTY, content, String.class); } catch (Exception e) { - return new HttpResult(500, e.toString(), Collections.emptyMap()); + return RestResult.builder().withCode(500).withMsg(e.toString()).build(); } } @@ -494,33 +317,17 @@ public static HttpResult httpPutLarge(String url, Map headers, b * @param url url * @param headers headers * @param content full request content - * @return {@link HttpResult} as response + * @return {@link RestResult} as response */ - public static HttpResult httpGetLarge(String url, Map headers, String content) { - HttpClientBuilder builder = HttpClients.custom(); - builder.setUserAgent(UtilsAndCommons.SERVER_VERSION); - builder.setConnectionTimeToLive(500, TimeUnit.MILLISECONDS); - try (CloseableHttpClient httpClient = builder.build();) { - - HttpGetWithEntity httpGetWithEntity = new HttpGetWithEntity(); - httpGetWithEntity.setURI(new URI(url)); - - for (Map.Entry entry : headers.entrySet()) { - httpGetWithEntity.setHeader(entry.getKey(), entry.getValue()); - } - - httpGetWithEntity.setEntity(new StringEntity(content, ContentType.create("application/json", "UTF-8"))); - - HttpResponse response = httpClient.execute(httpGetWithEntity); - HttpEntity entity = response.getEntity(); - - HeaderElement[] headerElements = entity.getContentType().getElements(); - String charset = headerElements[0].getParameterByName("charset").getValue(); - - return new HttpResult(response.getStatusLine().getStatusCode(), - IoUtils.toString(entity.getContent(), charset), Collections.emptyMap()); + public static RestResult httpGetLarge(String url, Map headers, String content) { + Header header = Header.newInstance(); + if (MapUtils.isNotEmpty(headers)) { + header.addAll(headers); + } + try { + return APACHE_SYNC_NACOS_REST_TEMPLATE.getLarge(url, header, Query.EMPTY, content, String.class); } catch (Exception e) { - return new HttpResult(500, e.toString(), Collections.emptyMap()); + return RestResult.builder().withCode(500).withMsg(e.toString()).build(); } } @@ -530,124 +337,18 @@ public static HttpResult httpGetLarge(String url, Map headers, S * @param url url * @param headers headers * @param content full request content - * @return {@link HttpResult} as response + * @return {@link RestResult} as response */ - public static HttpResult httpPostLarge(String url, Map headers, String content) { - HttpClientBuilder builder = HttpClients.custom(); - builder.setUserAgent(UtilsAndCommons.SERVER_VERSION); - builder.setConnectionTimeToLive(500, TimeUnit.MILLISECONDS); - try (CloseableHttpClient httpClient = builder.build();) { - - HttpPost httpost = new HttpPost(url); - - for (Map.Entry entry : headers.entrySet()) { - httpost.setHeader(entry.getKey(), entry.getValue()); - } - - httpost.setEntity(new StringEntity(content, ContentType.create("application/json", "UTF-8"))); - HttpResponse response = httpClient.execute(httpost); - HttpEntity entity = response.getEntity(); - - HeaderElement[] headerElements = entity.getContentType().getElements(); - String charset = headerElements[0].getParameterByName("charset").getValue(); - - return new HttpResult(response.getStatusLine().getStatusCode(), - IoUtils.toString(entity.getContent(), charset), Collections.emptyMap()); - } catch (Exception e) { - return new HttpResult(500, e.toString(), Collections.emptyMap()); - } - } - - private static HttpResult getResult(HttpURLConnection conn) throws IOException { - int respCode = conn.getResponseCode(); - - InputStream inputStream; - if (HttpURLConnection.HTTP_OK == respCode) { - inputStream = conn.getInputStream(); - } else { - inputStream = conn.getErrorStream(); - } - - Map respHeaders = new HashMap(conn.getHeaderFields().size()); - for (Map.Entry> entry : conn.getHeaderFields().entrySet()) { - respHeaders.put(entry.getKey(), entry.getValue().get(0)); - } - - String gzipEncoding = "gzip"; - - if (gzipEncoding.equals(respHeaders.get(HttpHeaders.CONTENT_ENCODING))) { - inputStream = new GZIPInputStream(inputStream); + public static RestResult httpPostLarge(String url, Map headers, String content) { + Header header = Header.newInstance(); + if (MapUtils.isNotEmpty(headers)) { + header.addAll(headers); } - - return new HttpResult(respCode, IoUtils.toString(inputStream, getCharset(conn)), respHeaders); - } - - private static String getCharset(HttpURLConnection conn) { - String contentType = conn.getContentType(); - if (StringUtils.isEmpty(contentType)) { - return "UTF-8"; - } - - String[] values = contentType.split(";"); - if (values.length == 0) { - return "UTF-8"; - } - - String charset = "UTF-8"; - for (String value : values) { - value = value.trim(); - - if (value.toLowerCase().startsWith("charset=")) { - charset = value.substring("charset=".length()); - } - } - - return charset; - } - - private static void setHeaders(HttpURLConnection conn, List headers, String encoding) { - if (null != headers) { - for (Iterator iter = headers.iterator(); iter.hasNext(); ) { - conn.addRequestProperty(iter.next(), iter.next()); - } - } - - conn.addRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + encoding); - conn.addRequestProperty("Accept-Charset", encoding); - conn.addRequestProperty(HttpHeaderConsts.CLIENT_VERSION_HEADER, VersionUtils.version); - conn.addRequestProperty(HttpHeaderConsts.USER_AGENT_HEADER, UtilsAndCommons.SERVER_VERSION); - conn.addRequestProperty(HttpHeaderConsts.REQUEST_SOURCE_HEADER, ApplicationUtils.getLocalAddress()); - } - - /** - * Encoding parameters. - * - * @param params parameters - * @param encoding charset - * @return parameters string - * @throws UnsupportedEncodingException unsupported encodin exception - */ - public static String encodingParams(Map params, String encoding) - throws UnsupportedEncodingException { - StringBuilder sb = new StringBuilder(); - if (null == params || params.isEmpty()) { - return null; - } - - params.put("encoding", encoding); - params.put("nofix", "1"); - - for (Map.Entry entry : params.entrySet()) { - if (StringUtils.isEmpty(entry.getValue())) { - continue; - } - - sb.append(entry.getKey()).append("="); - sb.append(URLEncoder.encode(entry.getValue(), encoding)); - sb.append("&"); + try { + return APACHE_SYNC_NACOS_REST_TEMPLATE.postJson(url, header, content, String.class); + } catch (Exception e) { + return RestResult.builder().withCode(500).withMsg(e.toString()).build(); } - - return sb.toString(); } /** @@ -664,33 +365,4 @@ public static Map translateParameterMap(Map pa } return map; } - - public static class HttpResult { - - public final int code; - - public final String content; - - private final Map respHeaders; - - public HttpResult(int code, String content, Map respHeaders) { - this.code = code; - this.content = content; - this.respHeaders = respHeaders; - } - - public String getHeader(String name) { - return respHeaders.get(name); - } - } - - public static class HttpGetWithEntity extends HttpEntityEnclosingRequestBase { - - public static final String METHOD_NAME = "GET"; - - @Override - public String getMethod() { - return METHOD_NAME; - } - } } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClientManager.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClientManager.java new file mode 100644 index 00000000000..bd1e3153c8b --- /dev/null +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClientManager.java @@ -0,0 +1,149 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.nacos.naming.misc; + +import com.alibaba.nacos.common.http.AbstractApacheHttpClientFactory; +import com.alibaba.nacos.common.http.AbstractHttpClientFactory; +import com.alibaba.nacos.common.http.HttpClientBeanHolder; +import com.alibaba.nacos.common.http.HttpClientConfig; +import com.alibaba.nacos.common.http.HttpClientFactory; +import com.alibaba.nacos.common.http.client.NacosAsyncRestTemplate; +import com.alibaba.nacos.common.http.client.NacosRestTemplate; +import com.alibaba.nacos.common.utils.ExceptionUtil; +import com.alibaba.nacos.common.utils.ThreadUtils; +import org.slf4j.Logger; + +import java.util.concurrent.TimeUnit; + +import static com.alibaba.nacos.naming.misc.Loggers.SRV_LOG; + +/** + * http Manager. + * + * @author mai.jh + */ +public class HttpClientManager { + + private static final int TIME_OUT_MILLIS = 10000; + + private static final int CON_TIME_OUT_MILLIS = 5000; + + private static final HttpClientFactory SYNC_HTTP_CLIENT_FACTORY = new SyncHttpClientFactory(); + + private static final HttpClientFactory ASYNC_HTTP_CLIENT_FACTORY = new AsyncHttpClientFactory(); + + private static final HttpClientFactory APACHE_SYNC_HTTP_CLIENT_FACTORY = new ApacheSyncHttpClientFactory(); + + private static final NacosRestTemplate NACOS_REST_TEMPLATE; + + private static final NacosRestTemplate APACHE_NACOS_REST_TEMPLATE; + + private static final NacosAsyncRestTemplate NACOS_ASYNC_REST_TEMPLATE; + + static { + // build nacos rest template + NACOS_REST_TEMPLATE = HttpClientBeanHolder.getNacosRestTemplate(SYNC_HTTP_CLIENT_FACTORY); + APACHE_NACOS_REST_TEMPLATE = HttpClientBeanHolder.getNacosRestTemplate(APACHE_SYNC_HTTP_CLIENT_FACTORY); + NACOS_ASYNC_REST_TEMPLATE = HttpClientBeanHolder.getNacosAsyncRestTemplate(ASYNC_HTTP_CLIENT_FACTORY); + + ThreadUtils.addShutdownHook(new Runnable() { + @Override + public void run() { + shutdown(); + } + }); + } + + public static NacosRestTemplate getNacosRestTemplate() { + return NACOS_REST_TEMPLATE; + } + + /** + * Use apache http client to achieve. + * @return NacosRestTemplate + */ + public static NacosRestTemplate getApacheRestTemplate() { + return APACHE_NACOS_REST_TEMPLATE; + } + + public static NacosAsyncRestTemplate getAsyncRestTemplate() { + return NACOS_ASYNC_REST_TEMPLATE; + } + + private static void shutdown() { + SRV_LOG.warn("[NamingServerHttpClientManager] Start destroying HTTP-Client"); + try { + HttpClientBeanHolder.shutdownNacostSyncRest(SYNC_HTTP_CLIENT_FACTORY.getClass().getName()); + HttpClientBeanHolder.shutdownNacostSyncRest(APACHE_SYNC_HTTP_CLIENT_FACTORY.getClass().getName()); + HttpClientBeanHolder.shutdownNacosAsyncRest(ASYNC_HTTP_CLIENT_FACTORY.getClass().getName()); + } catch (Exception ex) { + SRV_LOG.error("[NamingServerHttpClientManager] An exception occurred when the HTTP client was closed : {}", + ExceptionUtil.getStackTrace(ex)); + } + SRV_LOG.warn("[NamingServerHttpClientManager] Destruction of the end"); + } + + private static class AsyncHttpClientFactory extends AbstractHttpClientFactory { + + @Override + protected HttpClientConfig buildHttpClientConfig() { + return HttpClientConfig.builder().setConTimeOutMillis(CON_TIME_OUT_MILLIS) + .setReadTimeOutMillis(TIME_OUT_MILLIS) + .setUserAgent(UtilsAndCommons.SERVER_VERSION) + .setMaxConnTotal(-1) + .setMaxConnPerRoute(128) + .setMaxRedirects(0).build(); + } + + @Override + protected Logger assignLogger() { + return SRV_LOG; + } + } + + private static class SyncHttpClientFactory extends AbstractHttpClientFactory { + + @Override + protected HttpClientConfig buildHttpClientConfig() { + return HttpClientConfig.builder().setConTimeOutMillis(CON_TIME_OUT_MILLIS) + .setReadTimeOutMillis(TIME_OUT_MILLIS) + .setMaxRedirects(0).build(); + } + + @Override + protected Logger assignLogger() { + return SRV_LOG; + } + } + + private static class ApacheSyncHttpClientFactory extends AbstractApacheHttpClientFactory { + + @Override + protected HttpClientConfig buildHttpClientConfig() { + return HttpClientConfig.builder() + .setConnectionTimeToLive(500, TimeUnit.MILLISECONDS) + .setMaxConnTotal(Runtime.getRuntime().availableProcessors() * 2) + .setMaxConnPerRoute(Runtime.getRuntime().availableProcessors()) + .setMaxRedirects(0).build(); + } + + @Override + protected Logger assignLogger() { + return SRV_LOG; + } + } +} diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/NamingProxy.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/NamingProxy.java index 1225af7f180..5b762d4c196 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/NamingProxy.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/NamingProxy.java @@ -17,11 +17,11 @@ package com.alibaba.nacos.naming.misc; import com.alibaba.nacos.common.constant.HttpHeaderConsts; +import com.alibaba.nacos.common.http.Callback; +import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.common.utils.VersionUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.ning.http.client.AsyncCompletionHandler; -import com.ning.http.client.Response; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.apache.commons.lang3.StringUtils; import java.io.IOException; @@ -69,28 +69,32 @@ public static void syncCheckSums(byte[] checksums, String server) { headers.put(HttpHeaderConsts.CLIENT_VERSION_HEADER, VersionUtils.version); headers.put(HttpHeaderConsts.USER_AGENT_HEADER, UtilsAndCommons.SERVER_VERSION); - headers.put("Connection", "Keep-Alive"); + headers.put(HttpHeaderConsts.CONNECTION, "Keep-Alive"); HttpClient.asyncHttpPutLarge( "http://" + server + ApplicationUtils.getContextPath() + UtilsAndCommons.NACOS_NAMING_CONTEXT + TIMESTAMP_SYNC_URL + "?source=" + NetUtils.localServer(), headers, checksums, - new AsyncCompletionHandler() { + new Callback() { @Override - public Object onCompleted(Response response) throws Exception { - if (HttpURLConnection.HTTP_OK != response.getStatusCode()) { + public void onReceive(RestResult result) { + if (!result.ok()) { Loggers.DISTRO.error("failed to req API: {}, code: {}, msg: {}", "http://" + server + ApplicationUtils.getContextPath() + UtilsAndCommons.NACOS_NAMING_CONTEXT + TIMESTAMP_SYNC_URL, - response.getStatusCode(), response.getResponseBody()); + result.getCode(), result.getMessage()); } - return null; } - + @Override - public void onThrowable(Throwable t) { + public void onError(Throwable throwable) { Loggers.DISTRO .error("failed to req API:" + "http://" + server + ApplicationUtils.getContextPath() - + UtilsAndCommons.NACOS_NAMING_CONTEXT + TIMESTAMP_SYNC_URL, t); + + UtilsAndCommons.NACOS_NAMING_CONTEXT + TIMESTAMP_SYNC_URL, throwable); + } + + @Override + public void onCancel() { + } }); } catch (Exception e) { @@ -110,17 +114,17 @@ public static byte[] getData(List keys, String server) throws Exception Map params = new HashMap<>(8); params.put("keys", StringUtils.join(keys, ",")); - HttpClient.HttpResult result = HttpClient.httpGetLarge( + RestResult result = HttpClient.httpGetLarge( "http://" + server + ApplicationUtils.getContextPath() + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_GET_URL, new HashMap<>(8), JacksonUtils.toJson(params)); - if (HttpURLConnection.HTTP_OK == result.code) { - return result.content.getBytes(); + if (result.ok()) { + return result.getData().getBytes(); } throw new IOException("failed to req API: " + "http://" + server + ApplicationUtils.getContextPath() - + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_GET_URL + ". code: " + result.code + " msg: " - + result.content); + + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_GET_URL + ". code: " + result.getCode() + " msg: " + + result.getMessage()); } /** @@ -133,17 +137,17 @@ public static byte[] getData(List keys, String server) throws Exception public static byte[] getAllData(String server) throws Exception { Map params = new HashMap<>(8); - HttpClient.HttpResult result = HttpClient.httpGet( + RestResult result = HttpClient.httpGet( "http://" + server + ApplicationUtils.getContextPath() + UtilsAndCommons.NACOS_NAMING_CONTEXT + ALL_DATA_GET_URL, new ArrayList<>(), params); - if (HttpURLConnection.HTTP_OK == result.code) { - return result.content.getBytes(); + if (result.ok()) { + return result.getData().getBytes(); } throw new IOException("failed to req API: " + "http://" + server + ApplicationUtils.getContextPath() - + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_GET_URL + ". code: " + result.code + " msg: " - + result.content); + + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_GET_URL + ". code: " + result.getCode() + " msg: " + + result.getMessage()); } /** @@ -158,23 +162,23 @@ public static boolean syncData(byte[] data, String curServer) { headers.put(HttpHeaderConsts.CLIENT_VERSION_HEADER, VersionUtils.version); headers.put(HttpHeaderConsts.USER_AGENT_HEADER, UtilsAndCommons.SERVER_VERSION); - headers.put("Accept-Encoding", "gzip,deflate,sdch"); - headers.put("Connection", "Keep-Alive"); - headers.put("Content-Encoding", "gzip"); + headers.put(HttpHeaderConsts.ACCEPT_ENCODING, "gzip,deflate,sdch"); + headers.put(HttpHeaderConsts.CONNECTION, "Keep-Alive"); + headers.put(HttpHeaderConsts.CONTENT_ENCODING, "gzip"); try { - HttpClient.HttpResult result = HttpClient.httpPutLarge( + RestResult result = HttpClient.httpPutLarge( "http://" + curServer + ApplicationUtils.getContextPath() + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_ON_SYNC_URL, headers, data); - if (HttpURLConnection.HTTP_OK == result.code) { + if (result.ok()) { return true; } - if (HttpURLConnection.HTTP_NOT_MODIFIED == result.code) { + if (HttpURLConnection.HTTP_NOT_MODIFIED == result.getCode()) { return true; } throw new IOException("failed to req API:" + "http://" + curServer + ApplicationUtils.getContextPath() - + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_ON_SYNC_URL + ". code:" + result.code + " msg: " - + result.content); + + UtilsAndCommons.NACOS_NAMING_CONTEXT + DATA_ON_SYNC_URL + ". code:" + result.getCode() + " msg: " + + result.getData()); } catch (Exception e) { Loggers.SRV_LOG.warn("NamingProxy", e); } @@ -196,7 +200,7 @@ public static String reqApi(String api, Map params, String curSe HttpHeaderConsts.USER_AGENT_HEADER, UtilsAndCommons.SERVER_VERSION, "Accept-Encoding", "gzip,deflate,sdch", "Connection", "Keep-Alive", "Content-Encoding", "gzip"); - HttpClient.HttpResult result; + RestResult result; if (!curServer.contains(UtilsAndCommons.IP_PORT_SPLITER)) { curServer = curServer + UtilsAndCommons.IP_PORT_SPLITER + ApplicationUtils.getPort(); @@ -204,17 +208,17 @@ public static String reqApi(String api, Map params, String curSe result = HttpClient.httpGet("http://" + curServer + api, headers, params); - if (HttpURLConnection.HTTP_OK == result.code) { - return result.content; + if (result.ok()) { + return result.getData(); } - if (HttpURLConnection.HTTP_NOT_MODIFIED == result.code) { + if (HttpURLConnection.HTTP_NOT_MODIFIED == result.getCode()) { return StringUtils.EMPTY; } throw new IOException( - "failed to req API:" + "http://" + curServer + api + ". code:" + result.code + " msg: " - + result.content); + "failed to req API:" + "http://" + curServer + api + ". code:" + result.getCode() + " msg: " + + result.getMessage()); } catch (Exception e) { Loggers.SRV_LOG.warn("NamingProxy", e); } @@ -238,7 +242,7 @@ public static String reqApi(String api, Map params, String curSe HttpHeaderConsts.USER_AGENT_HEADER, UtilsAndCommons.SERVER_VERSION, "Accept-Encoding", "gzip,deflate,sdch", "Connection", "Keep-Alive", "Content-Encoding", "gzip"); - HttpClient.HttpResult result; + RestResult result; if (!curServer.contains(UtilsAndCommons.IP_PORT_SPLITER)) { curServer = curServer + UtilsAndCommons.IP_PORT_SPLITER + ApplicationUtils.getPort(); @@ -254,17 +258,17 @@ public static String reqApi(String api, Map params, String curSe + "/api/" + api, headers, params); } - if (HttpURLConnection.HTTP_OK == result.code) { - return result.content; + if (result.ok()) { + return result.getData(); } - if (HttpURLConnection.HTTP_NOT_MODIFIED == result.code) { + if (HttpURLConnection.HTTP_NOT_MODIFIED == result.getCode()) { return StringUtils.EMPTY; } throw new IOException("failed to req API:" + "http://" + curServer + ApplicationUtils.getContextPath() - + UtilsAndCommons.NACOS_NAMING_CONTEXT + "/api/" + api + ". code:" + result.code + " msg: " - + result.content); + + UtilsAndCommons.NACOS_NAMING_CONTEXT + "/api/" + api + ". code:" + result.getCode() + " msg: " + + result.getMessage()); } catch (Exception e) { Loggers.SRV_LOG.warn("NamingProxy", e); } @@ -288,7 +292,7 @@ public static String reqCommon(String path, Map params, String c UtilsAndCommons.SERVER_VERSION, "Accept-Encoding", "gzip,deflate,sdch", "Connection", "Keep-Alive", "Content-Encoding", "gzip"); - HttpClient.HttpResult result; + RestResult result; if (!curServer.contains(UtilsAndCommons.IP_PORT_SPLITER)) { curServer = curServer + UtilsAndCommons.IP_PORT_SPLITER + ApplicationUtils.getPort(); @@ -304,17 +308,17 @@ public static String reqCommon(String path, Map params, String c + path, headers, params); } - if (HttpURLConnection.HTTP_OK == result.code) { - return result.content; + if (result.ok()) { + return result.getData(); } - if (HttpURLConnection.HTTP_NOT_MODIFIED == result.code) { + if (HttpURLConnection.HTTP_NOT_MODIFIED == result.getCode()) { return StringUtils.EMPTY; } throw new IOException("failed to req API:" + "http://" + curServer + ApplicationUtils.getContextPath() - + UtilsAndCommons.NACOS_NAMING_CONTEXT + path + ". code:" + result.code + " msg: " - + result.content); + + UtilsAndCommons.NACOS_NAMING_CONTEXT + path + ". code:" + result.getCode() + " msg: " + + result.getMessage()); } catch (Exception e) { Loggers.SRV_LOG.warn("NamingProxy", e); } diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/NetUtils.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/NetUtils.java index bcdf3f568bc..7cd328d28fd 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/NetUtils.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/NetUtils.java @@ -16,8 +16,8 @@ package com.alibaba.nacos.naming.misc; -import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.alibaba.nacos.core.utils.InetUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.InetUtils; /** * Net Utils. diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/ServerStatusSynchronizer.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/ServerStatusSynchronizer.java index bb1243891f4..d16e7a2e3e8 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/ServerStatusSynchronizer.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/ServerStatusSynchronizer.java @@ -16,12 +16,11 @@ package com.alibaba.nacos.naming.misc; -import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.ning.http.client.AsyncCompletionHandler; -import com.ning.http.client.Response; +import com.alibaba.nacos.sys.utils.ApplicationUtils; +import com.alibaba.nacos.common.http.Callback; +import com.alibaba.nacos.common.model.RestResult; import org.springframework.util.StringUtils; -import java.net.HttpURLConnection; import java.util.HashMap; import java.util.Map; @@ -52,15 +51,23 @@ public void send(final String serverIP, Message msg) { } try { - HttpClient.asyncHttpGet(url, null, params, new AsyncCompletionHandler() { + HttpClient.asyncHttpGet(url, null, params, new Callback() { @Override - public Integer onCompleted(Response response) throws Exception { - if (response.getStatusCode() != HttpURLConnection.HTTP_OK) { + public void onReceive(RestResult result) { + if (!result.ok()) { Loggers.SRV_LOG.warn("[STATUS-SYNCHRONIZE] failed to request serverStatus, remote server: {}", serverIP); - return 1; } - return 0; + } + + @Override + public void onError(Throwable throwable) { + Loggers.SRV_LOG.warn("[STATUS-SYNCHRONIZE] failed to request serverStatus, remote server: {}", serverIP, throwable); + } + + @Override + public void onCancel() { + } }); } catch (Exception e) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/ServiceStatusSynchronizer.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/ServiceStatusSynchronizer.java index c65fa93c271..2f03b14f916 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/ServiceStatusSynchronizer.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/ServiceStatusSynchronizer.java @@ -16,13 +16,12 @@ package com.alibaba.nacos.naming.misc; +import com.alibaba.nacos.common.http.Callback; +import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.utils.JacksonUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; -import com.ning.http.client.AsyncCompletionHandler; -import com.ning.http.client.Response; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import org.apache.commons.lang3.StringUtils; -import java.net.HttpURLConnection; import java.util.HashMap; import java.util.Map; @@ -53,16 +52,24 @@ public void send(final String serverIP, Message msg) { } try { - HttpClient.asyncHttpPostLarge(url, null, JacksonUtils.toJson(params), new AsyncCompletionHandler() { + HttpClient.asyncHttpPostLarge(url, null, JacksonUtils.toJson(params), new Callback() { @Override - public Integer onCompleted(Response response) throws Exception { - if (response.getStatusCode() != HttpURLConnection.HTTP_OK) { + public void onReceive(RestResult result) { + if (!result.ok()) { Loggers.SRV_LOG.warn("[STATUS-SYNCHRONIZE] failed to request serviceStatus, remote server: {}", serverIP); - - return 1; + } - return 0; + } + + @Override + public void onError(Throwable throwable) { + Loggers.SRV_LOG.warn("[STATUS-SYNCHRONIZE] failed to request serviceStatus, remote server: " + serverIP, throwable); + } + + @Override + public void onCancel() { + } }); } catch (Exception e) { diff --git a/naming/src/main/java/com/alibaba/nacos/naming/misc/UtilsAndCommons.java b/naming/src/main/java/com/alibaba/nacos/naming/misc/UtilsAndCommons.java index fb398bd83e2..bc973da4c8d 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/misc/UtilsAndCommons.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/misc/UtilsAndCommons.java @@ -20,7 +20,7 @@ import com.alibaba.nacos.api.selector.SelectorType; import com.alibaba.nacos.common.utils.JacksonUtils; import com.alibaba.nacos.common.utils.VersionUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.selector.LabelSelector; import com.alibaba.nacos.naming.selector.NoneSelector; import com.fasterxml.jackson.core.type.TypeReference; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/selector/LabelSelector.java b/naming/src/main/java/com/alibaba/nacos/naming/selector/LabelSelector.java index f98615fbaae..dab5aa685c3 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/selector/LabelSelector.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/selector/LabelSelector.java @@ -22,7 +22,7 @@ import com.alibaba.nacos.api.selector.SelectorType; import com.alibaba.nacos.cmdb.service.CmdbReader; import com.alibaba.nacos.common.utils.JacksonUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.core.Instance; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; diff --git a/naming/src/main/java/com/alibaba/nacos/naming/web/DistroFilter.java b/naming/src/main/java/com/alibaba/nacos/naming/web/DistroFilter.java index 579731e458e..371182dd533 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/web/DistroFilter.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/web/DistroFilter.java @@ -19,6 +19,7 @@ import com.alibaba.nacos.api.common.Constants; import com.alibaba.nacos.api.naming.CommonParams; import com.alibaba.nacos.common.constant.HttpHeaderConsts; +import com.alibaba.nacos.common.model.RestResult; import com.alibaba.nacos.common.utils.ExceptionUtil; import com.alibaba.nacos.common.utils.IoUtils; import com.alibaba.nacos.core.code.ControllerMethodsCache; @@ -139,11 +140,12 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo final String body = IoUtils.toString(req.getInputStream(), Charsets.UTF_8.name()); final Map paramsValue = HttpClient.translateParameterMap(req.getParameterMap()); - HttpClient.HttpResult result = HttpClient + RestResult result = HttpClient .request("http://" + targetServer + req.getRequestURI(), headerList, paramsValue, body, PROXY_CONNECT_TIMEOUT, PROXY_READ_TIMEOUT, Charsets.UTF_8.name(), req.getMethod()); + String data = result.ok() ? result.getData() : result.getMessage(); try { - WebUtils.response(resp, result.content, result.code); + WebUtils.response(resp, data, result.getCode()); } catch (Exception ignore) { Loggers.SRV_LOG.warn("[DISTRO-FILTER] request failed: " + distroMapper.mapSrv(groupedServiceName) + urlString); diff --git a/naming/src/main/java/com/alibaba/nacos/naming/web/TrafficReviseFilter.java b/naming/src/main/java/com/alibaba/nacos/naming/web/TrafficReviseFilter.java index e0de5bc6917..e738b7e7477 100644 --- a/naming/src/main/java/com/alibaba/nacos/naming/web/TrafficReviseFilter.java +++ b/naming/src/main/java/com/alibaba/nacos/naming/web/TrafficReviseFilter.java @@ -17,7 +17,7 @@ package com.alibaba.nacos.naming.web; import com.alibaba.nacos.common.utils.HttpMethod; -import com.alibaba.nacos.core.utils.Constants; +import com.alibaba.nacos.sys.env.Constants; import com.alibaba.nacos.core.utils.WebUtils; import com.alibaba.nacos.naming.cluster.ServerStatus; import com.alibaba.nacos.naming.cluster.ServerStatusManager; diff --git a/naming/src/test/java/com/alibaba/nacos/naming/BaseTest.java b/naming/src/test/java/com/alibaba/nacos/naming/BaseTest.java index 9e36156e39f..a81502b5b06 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/BaseTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/BaseTest.java @@ -16,7 +16,7 @@ package com.alibaba.nacos.naming; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.consistency.persistent.raft.RaftCore; import com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeer; import com.alibaba.nacos.naming.consistency.persistent.raft.RaftPeerSet; diff --git a/naming/src/test/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImplTest.java b/naming/src/test/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImplTest.java index ffaa82a05f4..4a76dc1b444 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImplTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/consistency/ephemeral/distro/DistroConsistencyServiceImplTest.java @@ -24,9 +24,7 @@ import com.alibaba.nacos.naming.consistency.KeyBuilder; import com.alibaba.nacos.naming.consistency.RecordListener; import com.alibaba.nacos.core.distributed.distro.DistroProtocol; -import com.alibaba.nacos.core.distributed.distro.component.DistroComponentHolder; import com.alibaba.nacos.core.distributed.distro.entity.DistroKey; -import com.alibaba.nacos.core.distributed.distro.task.DistroTaskEngineHolder; import com.alibaba.nacos.naming.core.Instances; import com.alibaba.nacos.naming.misc.GlobalConfig; import org.junit.After; @@ -41,7 +39,6 @@ import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -68,20 +65,12 @@ public class DistroConsistencyServiceImplTest extends BaseTest { @Mock private RecordListener recordListener; - @Mock - private DistroComponentHolder distroComponentHolder; - - @Mock - private DistroTaskEngineHolder distroTaskEngineHolder; - private Map> listeners; private Instances instances; @Before public void setUp() throws Exception { - doReturn(distroComponentHolder).when(context).getBean(DistroComponentHolder.class); - doReturn(distroTaskEngineHolder).when(context).getBean(DistroTaskEngineHolder.class); when(globalConfig.getTaskDispatchPeriod()).thenReturn(2000); distroConsistencyService = new DistroConsistencyServiceImpl(distroMapper, dataStore, serializer, switchDomain, globalConfig, distroProtocol); diff --git a/naming/src/test/java/com/alibaba/nacos/naming/core/ClusterTest.java b/naming/src/test/java/com/alibaba/nacos/naming/core/ClusterTest.java index 49a202b9d99..f57c0474e72 100644 --- a/naming/src/test/java/com/alibaba/nacos/naming/core/ClusterTest.java +++ b/naming/src/test/java/com/alibaba/nacos/naming/core/ClusterTest.java @@ -18,7 +18,7 @@ import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Http; import com.alibaba.nacos.common.utils.JacksonUtils; -import com.alibaba.nacos.core.utils.ApplicationUtils; +import com.alibaba.nacos.sys.utils.ApplicationUtils; import com.alibaba.nacos.naming.misc.SwitchDomain; import com.alibaba.nacos.naming.misc.SwitchDomain.TcpHealthParams; diff --git a/pom.xml b/pom.xml index e09e468c7b7..8763e324856 100644 --- a/pom.xml +++ b/pom.xml @@ -579,6 +579,7 @@ istio consistency auth + sys @@ -686,6 +687,11 @@ nacos-auth ${project.version}
+ + ${project.groupId} + nacos-sys + ${project.version} + javax.servlet diff --git a/style/nacos-code-style-for-idea.xml b/style/nacos-code-style-for-idea.xml index 28846f8ae6b..6bd63a11332 100644 --- a/style/nacos-code-style-for-idea.xml +++ b/style/nacos-code-style-for-idea.xml @@ -139,6 +139,7 @@