From 90921a0da1ad7045e16d7da1b8d7cf6cb291c28b Mon Sep 17 00:00:00 2001 From: zhaokai Date: Mon, 30 Mar 2026 17:20:04 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E7=82=B9=E4=BD=9C=E4=B8=9A=E9=87=8D?= =?UTF-8?q?=E7=82=B9=E5=B7=A5=E7=A8=8B=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- start/src/main/resources/sdk-prod.yml | 8 ++ start/src/main/resources/sdk.yml | 8 ++ .../command/project/MessageNoticeExe.java | 3 + .../project/config/ThreadPoolAsyncConfig.java | 76 +++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 web-client/src/main/java/com/zcloud/key/project/config/ThreadPoolAsyncConfig.java diff --git a/start/src/main/resources/sdk-prod.yml b/start/src/main/resources/sdk-prod.yml index 83e59d1..bff2404 100644 --- a/start/src/main/resources/sdk-prod.yml +++ b/start/src/main/resources/sdk-prod.yml @@ -49,3 +49,11 @@ openapi: apiCode: test:01 #多个可以逗号隔开,可以为空 tenantIds: 1838408702262321152 +archives: + async: + pool: + maxPoolSize: 2 + corePoolSize: 1 + queueCapacity: 60 + namePrefix: async-task- + keepAliveSeconds: 60 \ No newline at end of file diff --git a/start/src/main/resources/sdk.yml b/start/src/main/resources/sdk.yml index 30a6956..7601d66 100644 --- a/start/src/main/resources/sdk.yml +++ b/start/src/main/resources/sdk.yml @@ -49,3 +49,11 @@ openapi: apiCode: test:01 #多个可以逗号隔开,可以为空 tenantIds: 1838408702262321152 +archives: + async: + pool: + maxPoolSize: 2 + corePoolSize: 1 + queueCapacity: 60 + namePrefix: async-task- + keepAliveSeconds: 60 \ No newline at end of file diff --git a/web-app/src/main/java/com/zcloud/key/project/command/project/MessageNoticeExe.java b/web-app/src/main/java/com/zcloud/key/project/command/project/MessageNoticeExe.java index 0b4c5da..768cb2b 100644 --- a/web-app/src/main/java/com/zcloud/key/project/command/project/MessageNoticeExe.java +++ b/web-app/src/main/java/com/zcloud/key/project/command/project/MessageNoticeExe.java @@ -67,6 +67,7 @@ public class MessageNoticeExe { log.error("{},消息提醒发送消息异常:", sourceCode,e); } } + @Async("asyncExecutor") public void sendMessageAddEvent(Long userId, String title,String content, Long foreignKey) { //消息通知 try{ @@ -81,6 +82,8 @@ public class MessageNoticeExe { event.setAppFlag(1); // 是否APP端待办 1是 0否 event.setOtherParams(new JSONObject()); log.info("待办,请求:{}",event); + //为了防止先被完成 + Thread.sleep(2000L); boolean b = todoListEventPusherUtil.sendMessageAddEvent(event); log.info("待办,结果:{}",b); }catch (Exception e) { diff --git a/web-client/src/main/java/com/zcloud/key/project/config/ThreadPoolAsyncConfig.java b/web-client/src/main/java/com/zcloud/key/project/config/ThreadPoolAsyncConfig.java new file mode 100644 index 0000000..5030ed9 --- /dev/null +++ b/web-client/src/main/java/com/zcloud/key/project/config/ThreadPoolAsyncConfig.java @@ -0,0 +1,76 @@ +package com.zcloud.key.project.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * @author zhangyue + * @date 2026/2/2 17:24 + */ + +@Configuration +public class ThreadPoolAsyncConfig { + + + public static Integer maxPoolSize; + public static Integer corePoolSize; + public static Integer queueCapacity; + public static String namePrefix; + public static Integer keepAliveSeconds; + + @Value("${archives.async.pool.maxPoolSize}") + public void setMaxPoolSize(Integer maxPoolSizeProperties) { + maxPoolSize = maxPoolSizeProperties; + } + + @Value("${archives.async.pool.corePoolSize}") + public void setCorePoolSize(Integer corePoolSizeProperties) { + corePoolSize = corePoolSizeProperties; + } + + @Value("${archives.async.pool.queueCapacity}") + public void setQueueCapacity(Integer queueCapacityProperties) { + queueCapacity = queueCapacityProperties; + } + + @Value("${archives.async.pool.namePrefix}") + public void setNamePrefix(String namePrefixProperties) { + namePrefix = namePrefixProperties; + } + + @Value("${archives.async.pool.keepAliveSeconds}") + public void setKeepAliveSeconds(Integer keepAliveSecondsProperties) { + keepAliveSeconds = keepAliveSecondsProperties; + } + + @Bean() + public Executor asyncExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + //最大线程数 + executor.setMaxPoolSize(maxPoolSize); + //核心线程数 + executor.setCorePoolSize(corePoolSize); + //任务队列的大小 + executor.setQueueCapacity(queueCapacity); + //线程前缀名 + executor.setThreadNamePrefix(namePrefix); + //线程存活时间 + executor.setKeepAliveSeconds(keepAliveSeconds); + /** + * 拒绝处理策略 + * CallerRunsPolicy():交由调用方线程运行,比如 main 线程。 + * AbortPolicy():直接抛出异常。 + * DiscardPolicy():直接丢弃。 + * DiscardOldestPolicy():丢弃队列中最老的任务。 + */ + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy()); + // 初始化 + executor.initialize(); + return executor; + } +}