|
@@ -5,6 +5,7 @@ import com.xxl.job.admin.core.model.XxlJobGroup;
|
5
|
5
|
import com.xxl.job.admin.core.model.XxlJobInfo;
|
6
|
6
|
import com.xxl.job.admin.core.model.XxlJobLog;
|
7
|
7
|
import com.xxl.job.admin.core.route.ExecutorRouteStrategyEnum;
|
|
8
|
+import com.xxl.job.admin.core.route.ExecutorRouter;
|
8
|
9
|
import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
|
9
|
10
|
import com.xxl.job.admin.core.thread.JobFailMonitorHelper;
|
10
|
11
|
import com.xxl.job.core.biz.model.ReturnT;
|
|
@@ -40,6 +41,79 @@ public class XxlJobTrigger {
|
40
|
41
|
ExecutorRouteStrategyEnum executorRouteStrategyEnum = ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null); // route strategy
|
41
|
42
|
ArrayList<String> addressList = (ArrayList<String>) group.getRegistryList();
|
42
|
43
|
|
|
44
|
+ // broadcast
|
|
45
|
+ if (ExecutorRouteStrategyEnum.BROADCAST == executorRouteStrategyEnum && CollectionUtils.isNotEmpty(addressList)) {
|
|
46
|
+ for (int i = 0; i < addressList.size(); i++) {
|
|
47
|
+ String address = addressList.get(i);
|
|
48
|
+
|
|
49
|
+ // 1、save log-id
|
|
50
|
+ XxlJobLog jobLog = new XxlJobLog();
|
|
51
|
+ jobLog.setJobGroup(jobInfo.getJobGroup());
|
|
52
|
+ jobLog.setJobId(jobInfo.getId());
|
|
53
|
+ XxlJobDynamicScheduler.xxlJobLogDao.save(jobLog);
|
|
54
|
+ logger.debug(">>>>>>>>>>> xxl-job trigger start, jobId:{}", jobLog.getId());
|
|
55
|
+
|
|
56
|
+ // 2、prepare trigger-info
|
|
57
|
+ //jobLog.setExecutorAddress(executorAddress);
|
|
58
|
+ jobLog.setGlueType(jobInfo.getGlueType());
|
|
59
|
+ jobLog.setExecutorHandler(jobInfo.getExecutorHandler());
|
|
60
|
+ jobLog.setExecutorParam(jobInfo.getExecutorParam());
|
|
61
|
+ jobLog.setTriggerTime(new Date());
|
|
62
|
+
|
|
63
|
+ ReturnT<String> triggerResult = new ReturnT<String>(null);
|
|
64
|
+ StringBuffer triggerMsgSb = new StringBuffer();
|
|
65
|
+ triggerMsgSb.append("注册方式:").append( (group.getAddressType() == 0)?"自动注册":"手动录入" );
|
|
66
|
+ triggerMsgSb.append("<br>阻塞处理策略:").append(blockStrategy.getTitle());
|
|
67
|
+ triggerMsgSb.append("<br>失败处理策略:").append(failStrategy.getTitle());
|
|
68
|
+ triggerMsgSb.append("<br>地址列表:").append(group.getRegistryList());
|
|
69
|
+ triggerMsgSb.append("<br>路由策略:").append(executorRouteStrategyEnum.getTitle()).append("("+i+"/"+addressList.size()+")"); // update01
|
|
70
|
+
|
|
71
|
+ // 3、trigger-valid
|
|
72
|
+ if (triggerResult.getCode()==ReturnT.SUCCESS_CODE && CollectionUtils.isEmpty(addressList)) {
|
|
73
|
+ triggerResult.setCode(ReturnT.FAIL_CODE);
|
|
74
|
+ triggerMsgSb.append("<br>----------------------<br>").append("调度失败:").append("执行器地址为空");
|
|
75
|
+ }
|
|
76
|
+
|
|
77
|
+ if (triggerResult.getCode() == ReturnT.SUCCESS_CODE) {
|
|
78
|
+ // 4.1、trigger-param
|
|
79
|
+ TriggerParam triggerParam = new TriggerParam();
|
|
80
|
+ triggerParam.setJobId(jobInfo.getId());
|
|
81
|
+ triggerParam.setExecutorHandler(jobInfo.getExecutorHandler());
|
|
82
|
+ triggerParam.setExecutorParams(jobInfo.getExecutorParam());
|
|
83
|
+ triggerParam.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
|
|
84
|
+ triggerParam.setLogId(jobLog.getId());
|
|
85
|
+ triggerParam.setLogDateTim(jobLog.getTriggerTime().getTime());
|
|
86
|
+ triggerParam.setGlueType(jobInfo.getGlueType());
|
|
87
|
+ triggerParam.setGlueSource(jobInfo.getGlueSource());
|
|
88
|
+ triggerParam.setGlueUpdatetime(jobInfo.getGlueUpdatetime().getTime());
|
|
89
|
+ triggerParam.setBroadcastIndex(i);
|
|
90
|
+ triggerParam.setBroadcastTotal(addressList.size()); // update02
|
|
91
|
+
|
|
92
|
+ // 4.2、trigger-run (route run / trigger remote executor)
|
|
93
|
+ triggerResult = ExecutorRouter.runExecutor(triggerParam, address); // update03
|
|
94
|
+ triggerMsgSb.append("<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>触发调度<<<<<<<<<<< </span><br>").append(triggerResult.getMsg());
|
|
95
|
+
|
|
96
|
+ // 4.3、trigger (fail retry)
|
|
97
|
+ if (triggerResult.getCode()!=ReturnT.SUCCESS_CODE && failStrategy == ExecutorFailStrategyEnum.FAIL_RETRY) {
|
|
98
|
+ triggerResult = ExecutorRouter.runExecutor(triggerParam, address); // update04
|
|
99
|
+ triggerMsgSb.append("<br><br><span style=\"color:#F39C12;\" > >>>>>>>>>>>失败重试<<<<<<<<<<< </span><br>").append(triggerResult.getMsg());
|
|
100
|
+ }
|
|
101
|
+ }
|
|
102
|
+
|
|
103
|
+ // 5、save trigger-info
|
|
104
|
+ jobLog.setExecutorAddress(triggerResult.getContent());
|
|
105
|
+ jobLog.setTriggerCode(triggerResult.getCode());
|
|
106
|
+ jobLog.setTriggerMsg(triggerMsgSb.toString());
|
|
107
|
+ XxlJobDynamicScheduler.xxlJobLogDao.updateTriggerInfo(jobLog);
|
|
108
|
+
|
|
109
|
+ // 6、monitor triger
|
|
110
|
+ JobFailMonitorHelper.monitor(jobLog.getId());
|
|
111
|
+ logger.debug(">>>>>>>>>>> xxl-job trigger end, jobId:{}", jobLog.getId());
|
|
112
|
+
|
|
113
|
+ }
|
|
114
|
+ return;
|
|
115
|
+ }
|
|
116
|
+
|
43
|
117
|
// 1、save log-id
|
44
|
118
|
XxlJobLog jobLog = new XxlJobLog();
|
45
|
119
|
jobLog.setJobGroup(jobInfo.getJobGroup());
|
|
@@ -67,10 +141,6 @@ public class XxlJobTrigger {
|
67
|
141
|
triggerResult.setCode(ReturnT.FAIL_CODE);
|
68
|
142
|
triggerMsgSb.append("<br>----------------------<br>").append("调度失败:").append("执行器地址为空");
|
69
|
143
|
}
|
70
|
|
- if (triggerResult.getCode() == ReturnT.SUCCESS_CODE && executorRouteStrategyEnum == null) {
|
71
|
|
- triggerResult.setCode(ReturnT.FAIL_CODE);
|
72
|
|
- triggerMsgSb.append("<br>----------------------<br>").append("调度失败:").append("执行器路由策略为空");
|
73
|
|
- }
|
74
|
144
|
|
75
|
145
|
if (triggerResult.getCode() == ReturnT.SUCCESS_CODE) {
|
76
|
146
|
// 4.1、trigger-param
|
|
@@ -79,11 +149,13 @@ public class XxlJobTrigger {
|
79
|
149
|
triggerParam.setExecutorHandler(jobInfo.getExecutorHandler());
|
80
|
150
|
triggerParam.setExecutorParams(jobInfo.getExecutorParam());
|
81
|
151
|
triggerParam.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
|
|
152
|
+ triggerParam.setLogId(jobLog.getId());
|
|
153
|
+ triggerParam.setLogDateTim(jobLog.getTriggerTime().getTime());
|
82
|
154
|
triggerParam.setGlueType(jobInfo.getGlueType());
|
83
|
155
|
triggerParam.setGlueSource(jobInfo.getGlueSource());
|
84
|
156
|
triggerParam.setGlueUpdatetime(jobInfo.getGlueUpdatetime().getTime());
|
85
|
|
- triggerParam.setLogId(jobLog.getId());
|
86
|
|
- triggerParam.setLogDateTim(jobLog.getTriggerTime().getTime());
|
|
157
|
+ triggerParam.setBroadcastIndex(0);
|
|
158
|
+ triggerParam.setBroadcastTotal(1);
|
87
|
159
|
|
88
|
160
|
// 4.2、trigger-run (route run / trigger remote executor)
|
89
|
161
|
triggerResult = executorRouteStrategyEnum.getRouter().routeRun(triggerParam, addressList);
|