Sfoglia il codice sorgente

欧诺——接收webhook,异步处理

xmy 2 settimane fa
parent
commit
4e5f267cc5

+ 38 - 0
mjava-ounuo/src/main/java/com/malk/tuosi/config/AsyncConfig.java

@@ -0,0 +1,38 @@
+package com.malk.tuosi.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+//import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+@Configuration
+public class AsyncConfig {
+    @Bean("businessTaskExecutor")
+    public Executor businessTaskExecutor() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        // 核心线程数(即使空闲也会保留)
+        executor.setCorePoolSize(5);
+
+        // 最大线程数(队列满后可扩容到此值)
+        executor.setMaxPoolSize(20);
+
+        // 任务队列容量(缓冲等待执行的任务)
+        executor.setQueueCapacity(100);
+
+        // 线程名前缀(便于日志排查)
+        executor.setThreadNamePrefix("async-task-");
+
+        // 拒绝策略(当队列和线程池都满时如何处理新任务)
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+
+        // 线程空闲超时时间(秒),超过此时间非核心线程会被回收
+//        executor.setKeepAliveSeconds(60);
+
+        // 初始化线程池(必须调用!)
+        executor.initialize();
+        return executor;
+    }
+}

+ 3 - 3
mjava-ounuo/src/main/java/com/malk/tuosi/schedule/ScheduleTask.java

@@ -1372,7 +1372,7 @@ public class ScheduleTask {
         return McR.success();
     }
 
-    /*todo:提成表*/
+    /*停用-提成表*/
     @SneakyThrows
     @PostMapping("/commissionTable")
     McR commissionTable(){
@@ -1589,8 +1589,8 @@ public class ScheduleTask {
         return McR.success();
     }
 
-    /*todo:提成表AI*/
-    @Scheduled(cron = "0 0 5 * * ?")
+    /*停用-提成表AI*/
+//    @Scheduled(cron = "0 0 5 * * ?")
     @SneakyThrows
     @PostMapping("/commissionTableAI")
     public McR commissionTableAI() {

+ 3 - 1
mjava-ounuo/src/main/java/com/malk/tuosi/service/TBService.java

@@ -18,7 +18,9 @@ public interface TBService {
     McR OuNuoXinAccessToken() throws JsonProcessingException;
 
    /*TODO:接收TB推送的数据*/
-    McR tbTaskUpdate(Map body) throws JsonProcessingException;
+    McR tbTaskUpdate_A(Map body) throws JsonProcessingException;//TODO:原始方法
+
+    McR tbTaskUpdate(Map body) throws JsonProcessingException;//TODO:异步执行
 
     /*TODO:钉盘文件上传接口*/
     McR uploadKnowledge(String pathName,String fileName,String fileType) throws JsonProcessingException;

+ 29 - 1
mjava-ounuo/src/main/java/com/malk/tuosi/service/impl/TbServiceImpl.java

@@ -22,6 +22,7 @@ import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import lombok.var;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.RequestBody;
 
@@ -79,12 +80,37 @@ public class TbServiceImpl implements TBService {
     }
 
     /*TODO:接收TB推送的数据*/
+
+    //TODO:异步执行
+
+    // 耗时操作必须放在独立方法上(不能和 Controller 在同一个类!)
+    @Async("businessTaskExecutor") // 指定线程池
+    public McR tbTaskUpdate(Map body) throws JsonProcessingException{
+        try {
+            // 模拟耗时操作(实际替换为你的业务)
+//            Thread.sleep(50000); // 50秒
+
+
+            tbTaskUpdate_A(body);
+
+        } catch (Exception e) {
+            // ⚠ 异步任务异常不会抛到 Controller,必须自己处理!
+            log.error("异步业务执行失败, 宜搭前端传参{}", body, e);
+            // 可选:发送告警、存入重试队列等
+        }
+        return McR.success();
+    }
+
+
+    //TODO:原始方法
     @SneakyThrows
     @Override
-    public McR tbTaskUpdate(Map body) throws JsonProcessingException {
+    public McR tbTaskUpdate_A(Map body) throws JsonProcessingException {
+        log.info("----开始接收webhook----");
         String s = JSON.toJSONString(body);
         JSONObject jsonObject = JSON.parseObject(s);
         String event = jsonObject.getString("event");
+        log.info("event:{}",event);
         //一层过滤:过滤事件[任务自定义字段更新事件]
         if (event.equals("v3.task.customfield.update")){
             JSONObject data = jsonObject.getJSONObject("data");
@@ -248,7 +274,9 @@ public class TbServiceImpl implements TBService {
                 }
             }
         } else if (event.equals("v3.task.create")) {
+            log.info("---更新任务确认---");
             JSONObject data = jsonObject.getJSONObject("data");
+            log.info("data:{}",data);
             String sfcId = data.getString("sfcId");
             if (sfcId.equals("6878b3c0669d175c3c6bc679") || sfcId.equals("6878b3ceb5ffcf500365d17a") || sfcId.equals("6878b3d8f40485da4c5f99a2")
                 || sfcId.equals("6878b39a27ae5f3cac355fb9") || sfcId.equals("6878b3a4090e6872fd6b78c6") || sfcId.equals("6878b3ad9e17ac8a027c6d37")

+ 1 - 1
mjava-ounuo/src/main/resources/application.yml

@@ -1,3 +1,3 @@
 spring:
   profiles:
-    active: dev
+    active: prod