From 60daa594e37b372dd729527ae6fe66b1ad6c5c4b Mon Sep 17 00:00:00 2001 From: "chen.ma" Date: Wed, 23 Jun 2021 11:54:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8A=9F=E8=83=BD=E6=8C=81=E7=BB=AD?= =?UTF-8?q?=E6=9B=B4=E6=96=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/pom.xml | 2 +- .../pom.xml | 8 ++- .../starter/adapter/ConfigAdapter.java | 5 +- .../adapter/ThreadPoolConfigAdapter.java | 2 +- .../DynamicThreadPoolAutoConfiguration.java | 4 +- .../config/DynamicThreadPoolProperties.java | 7 +- .../starter/core/ThreadPoolConfigService.java | 10 ++- .../core/ThreadPoolDynamicRefresh.java | 4 +- .../starter/core/ThreadPoolRunListener.java | 8 ++- .../threadpool/starter/http/HttpAgent.java | 70 +++++++++++++++++++ .../starter/http/ServerHttpAgent.java | 50 +++++++++++++ .../starter/http/ServerListManager.java | 13 ++++ .../starter/listener/ClientWorker.java | 8 ++- .../operation/ThreadPoolOperation.java | 2 +- .../ThreadPoolSubscribeCallback.java | 3 +- ...itional-spring-configuration-metadata.json | 27 +++++++ example/pom.xml | 4 +- example/src/main/resources/application.yaml | 10 +-- pom.xml | 46 +++++++++++- server/pom.xml | 2 +- 20 files changed, 254 insertions(+), 31 deletions(-) create mode 100644 dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/http/HttpAgent.java create mode 100644 dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/http/ServerHttpAgent.java create mode 100644 dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/http/ServerListManager.java create mode 100644 dynamic-threadpool-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json diff --git a/common/pom.xml b/common/pom.xml index b6a0b364..d53a6168 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -6,7 +6,7 @@ io.dynamic-threadpool parent - ${revision} + 1.0.0-SNAPSHOT common diff --git a/dynamic-threadpool-spring-boot-starter/pom.xml b/dynamic-threadpool-spring-boot-starter/pom.xml index f152c303..c5e32a85 100644 --- a/dynamic-threadpool-spring-boot-starter/pom.xml +++ b/dynamic-threadpool-spring-boot-starter/pom.xml @@ -6,7 +6,7 @@ io.dynamic-threadpool parent - ${revision} + 1.0.0-SNAPSHOT dynamic-threadpool-spring-boot-starter @@ -44,5 +44,11 @@ io.dynamic-threadpool common + + + org.springframework.boot + spring-boot-configuration-processor + true + diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/adapter/ConfigAdapter.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/adapter/ConfigAdapter.java index 34557b0f..f834c658 100644 --- a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/adapter/ConfigAdapter.java +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/adapter/ConfigAdapter.java @@ -13,10 +13,9 @@ public class ConfigAdapter { /** * 回调修改线程池配置 * - * @param tpId * @param config */ - public void callbackConfig(String tpId, String config) { - ThreadPoolDynamicRefresh.refreshDynamicPool(tpId, config); + public void callbackConfig(String config) { + ThreadPoolDynamicRefresh.refreshDynamicPool(config); } } diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/adapter/ThreadPoolConfigAdapter.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/adapter/ThreadPoolConfigAdapter.java index 59a0398e..579faac1 100644 --- a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/adapter/ThreadPoolConfigAdapter.java +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/adapter/ThreadPoolConfigAdapter.java @@ -31,7 +31,7 @@ public class ThreadPoolConfigAdapter extends ConfigAdapter { new ThreadPoolExecutor.DiscardOldestPolicy()); public void subscribeConfig(List tpIds) { - tpIds.forEach(each -> threadPoolOperation.subscribeConfig(each, executorService, (tpId, config) -> callbackConfig(tpId, config))); + tpIds.forEach(each -> threadPoolOperation.subscribeConfig(each, executorService, config -> callbackConfig(config))); } } diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/config/DynamicThreadPoolAutoConfiguration.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/config/DynamicThreadPoolAutoConfiguration.java index 5d9a461c..62ac5041 100644 --- a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/config/DynamicThreadPoolAutoConfiguration.java +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/config/DynamicThreadPoolAutoConfiguration.java @@ -29,12 +29,12 @@ public class DynamicThreadPoolAutoConfiguration { @Bean public ConfigService configService() { - return new ThreadPoolConfigService(); + return new ThreadPoolConfigService(properties); } @Bean public ThreadPoolRunListener threadPoolRunListener() { - return new ThreadPoolRunListener(); + return new ThreadPoolRunListener(properties); } @Bean diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/config/DynamicThreadPoolProperties.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/config/DynamicThreadPoolProperties.java index 2104f124..c84a45a0 100644 --- a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/config/DynamicThreadPoolProperties.java +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/config/DynamicThreadPoolProperties.java @@ -17,7 +17,12 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = DynamicThreadPoolProperties.PREFIX) public class DynamicThreadPoolProperties { - public static final String PREFIX = "spring.threadpool.dynamic"; + public static final String PREFIX = "spring.dynamic.thread-pool"; + + /** + * 服务地址 + */ + private String serverAddr; /** * 命名空间 diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/core/ThreadPoolConfigService.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/core/ThreadPoolConfigService.java index 5d34c79a..461510f0 100644 --- a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/core/ThreadPoolConfigService.java +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/core/ThreadPoolConfigService.java @@ -1,5 +1,8 @@ package io.dynamic.threadpool.starter.core; +import io.dynamic.threadpool.starter.config.DynamicThreadPoolProperties; +import io.dynamic.threadpool.starter.http.HttpAgent; +import io.dynamic.threadpool.starter.http.ServerHttpAgent; import io.dynamic.threadpool.starter.listener.ClientWorker; import io.dynamic.threadpool.starter.listener.Listener; @@ -13,10 +16,13 @@ import java.util.Arrays; */ public class ThreadPoolConfigService implements ConfigService { + private final HttpAgent httpAgent; + private final ClientWorker clientWorker; - public ThreadPoolConfigService() { - clientWorker = new ClientWorker(); + public ThreadPoolConfigService(DynamicThreadPoolProperties properties) { + httpAgent = new ServerHttpAgent(properties); + clientWorker = new ClientWorker(httpAgent); } @Override diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/core/ThreadPoolDynamicRefresh.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/core/ThreadPoolDynamicRefresh.java index e6c072a2..dfb993a7 100644 --- a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/core/ThreadPoolDynamicRefresh.java +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/core/ThreadPoolDynamicRefresh.java @@ -15,9 +15,9 @@ import java.util.concurrent.TimeUnit; */ public class ThreadPoolDynamicRefresh { - public static void refreshDynamicPool(String tpId, String content) { + public static void refreshDynamicPool(String content) { PoolParameterInfo parameter = JSON.parseObject(content, PoolParameterInfo.class); - refreshDynamicPool(tpId, parameter.getCoreSize(), parameter.getMaxSize(), parameter.getCapacity(), parameter.getKeepAliveTime()); + refreshDynamicPool(parameter.getTpId(), parameter.getCoreSize(), parameter.getMaxSize(), parameter.getCapacity(), parameter.getKeepAliveTime()); } public static void refreshDynamicPool(String threadPoolId, Integer coreSize, Integer maxSize, Integer capacity, Integer keepAliveTime) { diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/core/ThreadPoolRunListener.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/core/ThreadPoolRunListener.java index ba942fa8..5207d1b4 100644 --- a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/core/ThreadPoolRunListener.java +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/core/ThreadPoolRunListener.java @@ -11,7 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; -import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; import java.util.concurrent.BlockingQueue; @@ -29,8 +28,11 @@ public class ThreadPoolRunListener implements ApplicationRunner { @Autowired private HttpClientUtil httpClientUtil; - @Resource - private DynamicThreadPoolProperties dynamicThreadPoolProperties; + private final DynamicThreadPoolProperties dynamicThreadPoolProperties; + + public ThreadPoolRunListener(DynamicThreadPoolProperties properties) { + this.dynamicThreadPoolProperties = properties; + } @Override public void run(ApplicationArguments args) throws Exception { diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/http/HttpAgent.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/http/HttpAgent.java new file mode 100644 index 00000000..764b9c7d --- /dev/null +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/http/HttpAgent.java @@ -0,0 +1,70 @@ +package io.dynamic.threadpool.starter.http; + +import java.util.Map; + +/** + * Http Agent. + * + * @author chen.ma + * @date 2021/6/23 20:45 + */ +public interface HttpAgent { + + /** + * 开始获取 NacosIp 集合 + */ + void start(); + + /** + * 获取命名空间 + * + * @return + */ + String getNameSpace(); + + /** + * 获取编码集 + * + * @return + */ + String getEncode(); + + /** + * 发起 Http Get 请求 + * + * @param path + * @param headers + * @param paramValues + * @param encoding + * @param readTimeoutMs + * @return + */ + String httpGet(String path, Map headers, Map paramValues, + String encoding, long readTimeoutMs); + + /** + * 发起 Http Post 请求 + * + * @param path + * @param headers + * @param paramValues + * @param encoding + * @param readTimeoutMs + * @return + */ + String httpPost(String path, Map headers, Map paramValues, + String encoding, long readTimeoutMs); + + /** + * 发起 Http Delete 请求 + * + * @param path + * @param headers + * @param paramValues + * @param encoding + * @param readTimeoutMs + * @return + */ + String httpDelete(String path, Map headers, Map paramValues, + String encoding, long readTimeoutMs); +} diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/http/ServerHttpAgent.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/http/ServerHttpAgent.java new file mode 100644 index 00000000..dbd3b735 --- /dev/null +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/http/ServerHttpAgent.java @@ -0,0 +1,50 @@ +package io.dynamic.threadpool.starter.http; + +import io.dynamic.threadpool.starter.config.DynamicThreadPoolProperties; + +import java.util.Map; + +/** + * Server Http Agent. + * + * @author chen.ma + * @date 2021/6/23 20:50 + */ +public class ServerHttpAgent implements HttpAgent { + + private final DynamicThreadPoolProperties dynamicThreadPoolProperties; + + public ServerHttpAgent(DynamicThreadPoolProperties properties) { + this.dynamicThreadPoolProperties = properties; + } + + @Override + public void start() { + + } + + @Override + public String httpGet(String path, Map headers, Map paramValues, String encoding, long readTimeoutMs) { + return null; + } + + @Override + public String httpPost(String path, Map headers, Map paramValues, String encoding, long readTimeoutMs) { + return null; + } + + @Override + public String httpDelete(String path, Map headers, Map paramValues, String encoding, long readTimeoutMs) { + return null; + } + + @Override + public String getNameSpace() { + return null; + } + + @Override + public String getEncode() { + return null; + } +} diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/http/ServerListManager.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/http/ServerListManager.java new file mode 100644 index 00000000..dd0ca51d --- /dev/null +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/http/ServerListManager.java @@ -0,0 +1,13 @@ +package io.dynamic.threadpool.starter.http; + +import lombok.extern.slf4j.Slf4j; + +/** + * Server List Manager. + * + * @author chen.ma + * @date 2021/6/23 20:42 + */ +@Slf4j +public class ServerListManager { +} diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/listener/ClientWorker.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/listener/ClientWorker.java index 6fff2d44..76c070b5 100644 --- a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/listener/ClientWorker.java +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/listener/ClientWorker.java @@ -1,6 +1,7 @@ package io.dynamic.threadpool.starter.listener; import io.dynamic.threadpool.starter.core.CacheData; +import io.dynamic.threadpool.starter.http.HttpAgent; import lombok.extern.slf4j.Slf4j; import org.springframework.util.CollectionUtils; @@ -22,6 +23,8 @@ public class ClientWorker { private double currentLongingTaskCount = 0; + private final HttpAgent agent; + private final ScheduledExecutorService executor; private final ScheduledExecutorService executorService; @@ -29,7 +32,9 @@ public class ClientWorker { private final ConcurrentHashMap cacheMap = new ConcurrentHashMap(16); @SuppressWarnings("all") - public ClientWorker() { + public ClientWorker(HttpAgent httpAgent) { + this.agent = httpAgent; + this.executor = Executors.newScheduledThreadPool(1, r -> { Thread t = new Thread(r); t.setName("io.dynamic.threadPool.client.Worker.executor"); @@ -111,7 +116,6 @@ public class ClientWorker { for (CacheData each : cacheDataList) { each.checkListenerMd5(); } - } } diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/operation/ThreadPoolOperation.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/operation/ThreadPoolOperation.java index 33cca1f0..6b07aa2c 100644 --- a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/operation/ThreadPoolOperation.java +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/operation/ThreadPoolOperation.java @@ -21,7 +21,7 @@ public class ThreadPoolOperation { Listener configListener = new Listener() { @Override public void receiveConfigInfo(String config) { - threadPoolSubscribeCallback.callback(tpId, config); + threadPoolSubscribeCallback.callback(config); } @Override diff --git a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/operation/ThreadPoolSubscribeCallback.java b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/operation/ThreadPoolSubscribeCallback.java index ea4de466..904adfb1 100644 --- a/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/operation/ThreadPoolSubscribeCallback.java +++ b/dynamic-threadpool-spring-boot-starter/src/main/java/io/dynamic/threadpool/starter/operation/ThreadPoolSubscribeCallback.java @@ -11,8 +11,7 @@ public interface ThreadPoolSubscribeCallback { /** * 回调函数 * - * @param tpId * @param config */ - void callback(String tpId, String config); + void callback(String config); } diff --git a/dynamic-threadpool-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/dynamic-threadpool-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json new file mode 100644 index 00000000..109c9359 --- /dev/null +++ b/dynamic-threadpool-spring-boot-starter/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -0,0 +1,27 @@ +{ + "properties": [ + { + "name": "spring.dynamic.thread-pool.server-addr", + "type": "java.lang.String", + "defaultValue": "localhost:6691", + "description": "dynamic thread-pool server address." + }, + { + "name": "spring.dynamic.thread-pool.enabled", + "type": "java.lang.Boolean", + "defaultValue": false, + "description": "dynamic thread-pool enabled." + }, + { + "name": "spring.dynamic.thread-pool.namespace", + "type": "java.lang.String", + "defaultValue": "public", + "description": "dynamic thread-pool namespace." + }, + { + "name": "spring.dynamic.thread-pool.item-id", + "type": "java.lang.String", + "description": "dynamic thread-pool item-id." + } + ] +} \ No newline at end of file diff --git a/example/pom.xml b/example/pom.xml index 65b239c0..f50dc95a 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -6,7 +6,7 @@ io.dynamic-threadpool parent - ${revision} + 1.0.0-SNAPSHOT dynamic-threadpool-example @@ -39,7 +39,7 @@ io.dynamic-threadpool dynamic-threadpool-spring-boot-starter - ${revision} + 1.0.0-SNAPSHOT diff --git a/example/src/main/resources/application.yaml b/example/src/main/resources/application.yaml index 2d9c745c..27eb56e8 100644 --- a/example/src/main/resources/application.yaml +++ b/example/src/main/resources/application.yaml @@ -1,5 +1,7 @@ spring: - threadpool: - dynamic: - namespace: common - itemId: message-center + dynamic: + thread-pool: + enabled: true + server-addr: localhost:6691 + namespace: public + item-id: message-center \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3a0240b3..3fb3e1af 100644 --- a/pom.xml +++ b/pom.xml @@ -5,11 +5,11 @@ io.dynamic-threadpool parent - ${revision} + 1.0.0-SNAPSHOT pom ${project.artifactId} - 动态线程池,附带监控报警功能 + 🔥 强大的动态线程池,附带监控报警功能 1.8 @@ -24,6 +24,7 @@ + common server example dynamic-threadpool-spring-boot-starter @@ -67,7 +68,7 @@ io.dynamic-threadpool common - ${revision} + 1.0.0-SNAPSHOT @@ -80,6 +81,19 @@ + + + release_user + Release Deploy + http://localhost:8081/repository/maven-releases/ + + + snapshot_user + Snapshot Deploy + http://localhost:8081/repository/maven-snapshots/ + + + @@ -87,6 +101,32 @@ spring-boot-maven-plugin + + org.apache.maven.plugins maven-compiler-plugin diff --git a/server/pom.xml b/server/pom.xml index 78b99d27..e4828d37 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -6,7 +6,7 @@ io.dynamic-threadpool parent - ${revision} + 1.0.0-SNAPSHOT dynamic-threadpool-server