Просмотр исходного кода

降低回调频率提升执行器性能

xuxueli 8 лет назад
Родитель
Сommit
d1d8d61c49

+ 2 - 1
doc/XXL-JOB官方文档.md Просмотреть файл

@@ -866,6 +866,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
866 866
 - 5、路由策略代码重构;
867 867
 - 6、执行器重复注册问题修复;
868 868
 - 7、任务线程轮空30次后自动销毁,降低低频任务的无效线程消耗。
869
+- 8、执行器任务执行结果批量回调,降低回调频率提升执行器性能;
869 870
 
870 871
 #### TODO LIST
871 872
 - 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
@@ -876,7 +877,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
876 877
 - 6、任务依赖,流程图,子任务+会签任务,各节点日志;
877 878
 - 7、调度任务优先级;
878 879
 - 8、移除quartz依赖,重写调度模块:新增或恢复任务时将下次执行记录插入delayqueue,调度中心集群竞争分布式锁,成功节点批量加载到期delayqueue数据,批量执行。
879
-
880
+- 9、任务执行结果回调失败后重试:待定,防止回调死循环;
880 881
 
881 882
 ## 七、其他
882 883
 

+ 11 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/controller/JobApiController.java Просмотреть файл

@@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.ResponseBody;
24 24
 import javax.annotation.Resource;
25 25
 import java.text.MessageFormat;
26 26
 import java.util.Date;
27
+import java.util.List;
27 28
 
28 29
 /**
29 30
  * Created by xuxueli on 17/5/10.
@@ -43,9 +44,18 @@ public class JobApiController {
43 44
     @RequestMapping(value= AdminApiUtil.CALLBACK, method = RequestMethod.POST, consumes = "application/json")
44 45
     @ResponseBody
45 46
     @PermessionLimit(limit=false)
46
-    public ReturnT<String> callback(@RequestBody HandleCallbackParam handleCallbackParam){
47
+    public ReturnT<String> callback(@RequestBody List<HandleCallbackParam> callbackParamList){
47 48
 
49
+        for (HandleCallbackParam handleCallbackParam: callbackParamList) {
50
+            ReturnT<String> callbackResult = callback(handleCallbackParam);
51
+            logger.info("JobApiController.callback {}, handleCallbackParam={}, callbackResult={}",
52
+                    (callbackResult.getCode()==ReturnT.SUCCESS_CODE?"success":"fail"), handleCallbackParam, callbackResult);
53
+        }
54
+
55
+        return ReturnT.SUCCESS;
56
+    }
48 57
 
58
+    private ReturnT<String> callback(HandleCallbackParam handleCallbackParam) {
49 59
         // valid log item
50 60
         XxlJobLog log = xxlJobLogDao.load(handleCallbackParam.getLogId());
51 61
         if (log == null) {

+ 12 - 3
xxl-job-core/src/main/java/com/xxl/job/core/thread/TriggerCallbackThread.java Просмотреть файл

@@ -6,6 +6,8 @@ import com.xxl.job.core.util.AdminApiUtil;
6 6
 import org.slf4j.Logger;
7 7
 import org.slf4j.LoggerFactory;
8 8
 
9
+import java.util.ArrayList;
10
+import java.util.List;
9 11
 import java.util.concurrent.LinkedBlockingQueue;
10 12
 
11 13
 /**
@@ -32,12 +34,19 @@ public class TriggerCallbackThread {
32 34
                     try {
33 35
                         HandleCallbackParam callback = getInstance().callBackQueue.take();
34 36
                         if (callback != null) {
35
-                            // callback
37
+
38
+                            // callback list
39
+                            List<HandleCallbackParam> callbackParamList = new ArrayList<HandleCallbackParam>();
40
+                            int drainToNum = getInstance().callBackQueue.drainTo(callbackParamList);
41
+                            callbackParamList.add(callback);
42
+
43
+                            // callback, will retry if error
36 44
                             try {
37
-                                ReturnT<String> callbackResult = AdminApiUtil.callApiFailover(AdminApiUtil.CALLBACK, callback);
38
-                                logger.info(">>>>>>>>>>> xxl-job callback, HandleCallbackParam:{}, callbackResult:{}", new Object[]{callback.toString(), callbackResult.toString()});
45
+                                ReturnT<String> callbackResult = AdminApiUtil.callApiFailover(AdminApiUtil.CALLBACK, callbackParamList);
46
+                                logger.info(">>>>>>>>>>> xxl-job callback, callbackParamList:{}, callbackResult:{}", new Object[]{callbackParamList, callbackResult});
39 47
                             } catch (Exception e) {
40 48
                                 logger.error(">>>>>>>>>>> xxl-job TriggerCallbackThread Exception:", e);
49
+                                //getInstance().callBackQueue.addAll(callbackParamList);
41 50
                             }
42 51
                         }
43 52
                     } catch (Exception e) {