瀏覽代碼

路由策略代码重构;

xuxueli 8 年之前
父節點
當前提交
21b1bf9d26

+ 7 - 94
xxl-job-admin/src/main/java/com/xxl/job/admin/core/jobbean/RemoteHttpJobBean.java 查看文件

8
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
8
 import com.xxl.job.admin.core.schedule.XxlJobDynamicScheduler;
9
 import com.xxl.job.admin.core.thread.JobFailMonitorHelper;
9
 import com.xxl.job.admin.core.thread.JobFailMonitorHelper;
10
 import com.xxl.job.admin.core.thread.JobRegistryMonitorHelper;
10
 import com.xxl.job.admin.core.thread.JobRegistryMonitorHelper;
11
-import com.xxl.job.core.biz.ExecutorBiz;
12
 import com.xxl.job.core.biz.model.ReturnT;
11
 import com.xxl.job.core.biz.model.ReturnT;
13
 import com.xxl.job.core.biz.model.TriggerParam;
12
 import com.xxl.job.core.biz.model.TriggerParam;
14
 import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
13
 import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
15
 import com.xxl.job.core.enums.RegistryConfig;
14
 import com.xxl.job.core.enums.RegistryConfig;
16
-import com.xxl.job.core.rpc.netcom.NetComClientProxy;
17
 import org.apache.commons.collections.CollectionUtils;
15
 import org.apache.commons.collections.CollectionUtils;
18
 import org.apache.commons.lang.StringUtils;
16
 import org.apache.commons.lang.StringUtils;
19
 import org.quartz.JobExecutionContext;
17
 import org.quartz.JobExecutionContext;
23
 import org.slf4j.LoggerFactory;
21
 import org.slf4j.LoggerFactory;
24
 import org.springframework.scheduling.quartz.QuartzJobBean;
22
 import org.springframework.scheduling.quartz.QuartzJobBean;
25
 
23
 
26
-import java.util.*;
24
+import java.util.ArrayList;
25
+import java.util.Arrays;
26
+import java.util.Date;
27
 
27
 
28
 /**
28
 /**
29
  * http job bean
29
  * http job bean
122
 		}
122
 		}
123
 		triggerSb.append("<br>路由策略:").append(executorRouteStrategyEnum.name() + "-" + executorRouteStrategyEnum.getTitle());
123
 		triggerSb.append("<br>路由策略:").append(executorRouteStrategyEnum.name() + "-" + executorRouteStrategyEnum.getTitle());
124
 
124
 
125
-		// trigger remote executor
126
-		if (executorRouteStrategyEnum == ExecutorRouteStrategyEnum.FAILOVER) {
127
-			for (String address : addressList) {
128
-				// beat
129
-				ReturnT<String> beatResult = null;
130
-				try {
131
-					ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address).getObject();
132
-					beatResult = executorBiz.beat();
133
-				} catch (Exception e) {
134
-					logger.error("", e);
135
-					beatResult = new ReturnT<String>(ReturnT.FAIL_CODE, ""+e );
136
-				}
137
-				triggerSb.append("<br>----------------------<br>")
138
-						.append("心跳检测:")
139
-						.append("<br>address:").append(address)
140
-						.append("<br>code:").append(beatResult.getCode())
141
-						.append("<br>msg:").append(beatResult.getMsg());
142
-
143
-				// beat success
144
-				if (beatResult.getCode() == ReturnT.SUCCESS_CODE) {
145
-					jobLog.setExecutorAddress(address);
146
-
147
-					ReturnT<String> runResult = runExecutor(triggerParam, address);
148
-					triggerSb.append("<br>----------------------<br>").append(runResult.getMsg());
149
-
150
-					return new ReturnT<String>(runResult.getCode(), triggerSb.toString());
151
-				}
152
-			}
153
-			return new ReturnT<String>(ReturnT.FAIL_CODE, triggerSb.toString());
154
-		} else if (executorRouteStrategyEnum == ExecutorRouteStrategyEnum.BUSYOVER) {
155
-			for (String address : addressList) {
156
-				// beat
157
-				ReturnT<String> idleBeatResult = null;
158
-				try {
159
-					ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address).getObject();
160
-					idleBeatResult = executorBiz.idleBeat(triggerParam.getJobId());
161
-				} catch (Exception e) {
162
-					logger.error("", e);
163
-					idleBeatResult = new ReturnT<String>(ReturnT.FAIL_CODE, ""+e );
164
-				}
165
-				triggerSb.append("<br>----------------------<br>")
166
-						.append("空闲检测:")
167
-						.append("<br>address:").append(address)
168
-						.append("<br>code:").append(idleBeatResult.getCode())
169
-						.append("<br>msg:").append(idleBeatResult.getMsg());
170
-
171
-				// beat success
172
-				if (idleBeatResult.getCode() == ReturnT.SUCCESS_CODE) {
173
-					jobLog.setExecutorAddress(address);
174
-
175
-					ReturnT<String> runResult = runExecutor(triggerParam, address);
176
-					triggerSb.append("<br>----------------------<br>").append(runResult.getMsg());
177
-
178
-					return new ReturnT<String>(runResult.getCode(), triggerSb.toString());
179
-				}
180
-			}
181
-			return new ReturnT<String>(ReturnT.FAIL_CODE, triggerSb.toString());
182
-		} else {
183
-			// get address
184
-			String address = executorRouteStrategyEnum.getRouter().route(jobInfo.getId(), addressList);
185
-			jobLog.setExecutorAddress(address);
186
-
187
-			// run
188
-			ReturnT<String> runResult = runExecutor(triggerParam, address);
189
-			triggerSb.append("<br>----------------------<br>").append(runResult.getMsg());
190
-
191
-			return new ReturnT<String>(runResult.getCode(), triggerSb.toString());
192
-		}
193
-	}
194
-
195
-	/**
196
-	 * run executor
197
-	 * @param triggerParam
198
-	 * @param address
199
-	 * @return
200
-	 */
201
-	public ReturnT<String> runExecutor(TriggerParam triggerParam, String address){
202
-		ReturnT<String> runResult = null;
203
-		try {
204
-			ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address).getObject();
205
-			runResult = executorBiz.run(triggerParam);
206
-		} catch (Exception e) {
207
-			logger.error("", e);
208
-			runResult = new ReturnT<String>(ReturnT.FAIL_CODE, ""+e );
209
-		}
210
 
125
 
211
-		StringBuffer sb = new StringBuffer("触发调度:");
212
-		sb.append("<br>address:").append(address);
213
-		sb.append("<br>code:").append(runResult.getCode());
214
-		sb.append("<br>msg:").append(runResult.getMsg());
215
-		runResult.setMsg(sb.toString());
126
+		// route run / trigger remote executor
127
+		ReturnT<String> routeRunResult = executorRouteStrategyEnum.getRouter().routeRun(triggerParam, addressList, jobLog);
128
+		triggerSb.append("<br>----------------------<br>").append(routeRunResult.getMsg());
129
+		return new ReturnT<String>(routeRunResult.getCode(), triggerSb.toString());
216
 
130
 
217
-		return runResult;
218
 	}
131
 	}
219
 
132
 
220
 }
133
 }

+ 2 - 2
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouteStrategyEnum.java 查看文件

14
     CONSISTENT_HASH("一致性HASH", new ExecutorRouteConsistentHash()),
14
     CONSISTENT_HASH("一致性HASH", new ExecutorRouteConsistentHash()),
15
     LEAST_FREQUENTLY_USED("最不经常使用", new ExecutorRouteLFU()),
15
     LEAST_FREQUENTLY_USED("最不经常使用", new ExecutorRouteLFU()),
16
     LEAST_RECENTLY_USED("最近最久未使用", new ExecutorRouteLRU()),
16
     LEAST_RECENTLY_USED("最近最久未使用", new ExecutorRouteLRU()),
17
-    FAILOVER("故障转移", null),
18
-    BUSYOVER("忙碌转移", null);
17
+    FAILOVER("故障转移", new ExecutorRouteFailover()),
18
+    BUSYOVER("忙碌转移", new ExecutorRouteBusyover());
19
 
19
 
20
     ExecutorRouteStrategyEnum(String title, ExecutorRouter router) {
20
     ExecutorRouteStrategyEnum(String title, ExecutorRouter router) {
21
         this.title = title;
21
         this.title = title;

+ 38 - 19
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/ExecutorRouter.java 查看文件

1
 package com.xxl.job.admin.core.route;
1
 package com.xxl.job.admin.core.route;
2
 
2
 
3
-import org.apache.commons.collections.CollectionUtils;
3
+import com.xxl.job.admin.core.model.XxlJobLog;
4
+import com.xxl.job.core.biz.ExecutorBiz;
5
+import com.xxl.job.core.biz.model.ReturnT;
6
+import com.xxl.job.core.biz.model.TriggerParam;
7
+import com.xxl.job.core.rpc.netcom.NetComClientProxy;
8
+import org.slf4j.Logger;
9
+import org.slf4j.LoggerFactory;
4
 
10
 
5
 import java.util.ArrayList;
11
 import java.util.ArrayList;
6
-import java.util.Arrays;
7
 
12
 
8
 /**
13
 /**
9
  * Created by xuxueli on 17/3/10.
14
  * Created by xuxueli on 17/3/10.
10
  */
15
  */
11
 public abstract class ExecutorRouter {
16
 public abstract class ExecutorRouter {
12
-
13
-    public abstract String route(int jobId, ArrayList<String> addressList);
14
-
15
-    public static String route(int jobId, ArrayList<String> addressList, String executorRouteStrategy){
16
-        if (CollectionUtils.isEmpty(addressList)) {
17
-            return null;
17
+    protected static Logger logger = LoggerFactory.getLogger(ExecutorRouter.class);
18
+
19
+    /**
20
+     * route run
21
+     *
22
+     * @param triggerParam
23
+     * @param addressList
24
+     * @return
25
+     */
26
+    public abstract ReturnT<String> routeRun(TriggerParam triggerParam, ArrayList<String> addressList, XxlJobLog jobLog);
27
+
28
+    /**
29
+     * run executor
30
+     * @param triggerParam
31
+     * @param address
32
+     * @return
33
+     */
34
+    protected static ReturnT<String> runExecutor(TriggerParam triggerParam, String address){
35
+        ReturnT<String> runResult = null;
36
+        try {
37
+            ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address).getObject();
38
+            runResult = executorBiz.run(triggerParam);
39
+        } catch (Exception e) {
40
+            logger.error("", e);
41
+            runResult = new ReturnT<String>(ReturnT.FAIL_CODE, ""+e );
18
         }
42
         }
19
-        ExecutorRouteStrategyEnum strategy = ExecutorRouteStrategyEnum.match(executorRouteStrategy, ExecutorRouteStrategyEnum.FIRST);
20
-        String routeAddress = strategy.getRouter().route(jobId, addressList);
21
-        return routeAddress;
22
-    }
23
 
43
 
24
-    public static void main(String[] args) {
25
-
26
-
27
-        for (int i = 0; i < 100; i++) {
28
-            String ret = ExecutorRouter.route(666, new ArrayList<String>(Arrays.asList("127.0.0.1:0000", "127.0.0.1:2222", "127.0.0.1:3333")), ExecutorRouteStrategyEnum.LEAST_FREQUENTLY_USED.name());
29
-            System.out.println(ret);
30
-        }
44
+        StringBuffer runResultSB = new StringBuffer("触发调度:");
45
+        runResultSB.append("<br>address:").append(address);
46
+        runResultSB.append("<br>code:").append(runResult.getCode());
47
+        runResultSB.append("<br>msg:").append(runResult.getMsg());
31
 
48
 
49
+        runResult.setMsg(runResultSB.toString());
50
+        return runResult;
32
     }
51
     }
33
 
52
 
34
 }
53
 }

+ 54 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteBusyover.java 查看文件

1
+package com.xxl.job.admin.core.route.strategy;
2
+
3
+import com.xxl.job.admin.core.model.XxlJobLog;
4
+import com.xxl.job.admin.core.route.ExecutorRouter;
5
+import com.xxl.job.core.biz.ExecutorBiz;
6
+import com.xxl.job.core.biz.model.ReturnT;
7
+import com.xxl.job.core.biz.model.TriggerParam;
8
+import com.xxl.job.core.rpc.netcom.NetComClientProxy;
9
+
10
+import java.util.ArrayList;
11
+
12
+/**
13
+ * Created by xuxueli on 17/3/10.
14
+ */
15
+public class ExecutorRouteBusyover extends ExecutorRouter {
16
+
17
+    public String route(int jobId, ArrayList<String> addressList) {
18
+        return addressList.get(0);
19
+    }
20
+
21
+    @Override
22
+    public ReturnT<String> routeRun(TriggerParam triggerParam, ArrayList<String> addressList, XxlJobLog jobLog) {
23
+
24
+        StringBuffer idleBeatResultSB = new StringBuffer();
25
+        for (String address : addressList) {
26
+            // beat
27
+            ReturnT<String> idleBeatResult = null;
28
+            try {
29
+                ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address).getObject();
30
+                idleBeatResult = executorBiz.idleBeat(triggerParam.getJobId());
31
+            } catch (Exception e) {
32
+                logger.error(e.getMessage(), e);
33
+                idleBeatResult = new ReturnT<String>(ReturnT.FAIL_CODE, ""+e );
34
+            }
35
+            idleBeatResultSB.append("<br>----------------------<br>")
36
+                    .append("空闲检测:")
37
+                    .append("<br>address:").append(address)
38
+                    .append("<br>code:").append(idleBeatResult.getCode())
39
+                    .append("<br>msg:").append(idleBeatResult.getMsg());
40
+
41
+            // beat success
42
+            if (idleBeatResult.getCode() == ReturnT.SUCCESS_CODE) {
43
+                jobLog.setExecutorAddress(address);
44
+
45
+                ReturnT<String> runResult = runExecutor(triggerParam, address);
46
+                idleBeatResultSB.append("<br>----------------------<br>").append(runResult.getMsg());
47
+
48
+                return new ReturnT<String>(runResult.getCode(), idleBeatResultSB.toString());
49
+            }
50
+        }
51
+
52
+        return new ReturnT<String>(ReturnT.FAIL_CODE, idleBeatResultSB.toString());
53
+    }
54
+}

+ 35 - 23
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteConsistentHash.java 查看文件

1
 package com.xxl.job.admin.core.route.strategy;
1
 package com.xxl.job.admin.core.route.strategy;
2
 
2
 
3
+import com.xxl.job.admin.core.model.XxlJobLog;
3
 import com.xxl.job.admin.core.route.ExecutorRouter;
4
 import com.xxl.job.admin.core.route.ExecutorRouter;
5
+import com.xxl.job.core.biz.model.ReturnT;
6
+import com.xxl.job.core.biz.model.TriggerParam;
4
 
7
 
5
 import java.io.UnsupportedEncodingException;
8
 import java.io.UnsupportedEncodingException;
6
 import java.security.MessageDigest;
9
 import java.security.MessageDigest;
19
 
22
 
20
     private static int VIRTUAL_NODE_NUM = 5;
23
     private static int VIRTUAL_NODE_NUM = 5;
21
 
24
 
22
-    @Override
23
-    public String route(int jobId, ArrayList<String> addressList) {
24
-
25
-        // ------A1------A2-------A3------
26
-        // -----------J1------------------
27
-        TreeMap<Long, String> addressRing = new TreeMap<Long, String>();
28
-        for (String address: addressList) {
29
-            for (int i = 0; i < VIRTUAL_NODE_NUM; i++) {
30
-                long addressHash = hash("SHARD-" + address + "-NODE-" + i);
31
-                addressRing.put(addressHash, address);
32
-            }
33
-        }
34
-
35
-        long jobHash = hash(String.valueOf(jobId));
36
-        SortedMap<Long, String> lastRing = addressRing.tailMap(jobHash);
37
-        if (!lastRing.isEmpty()) {
38
-            return lastRing.get(lastRing.firstKey());
39
-        }
40
-        return addressRing.firstEntry().getValue();
41
-    }
42
-
43
-
44
-
45
     /**
25
     /**
46
      * get hash code on 2^32 ring (md5散列的方式计算hash值)
26
      * get hash code on 2^32 ring (md5散列的方式计算hash值)
47
      * @param key
27
      * @param key
77
         return truncateHashCode;
57
         return truncateHashCode;
78
     }
58
     }
79
 
59
 
60
+    public String route(int jobId, ArrayList<String> addressList) {
61
+
62
+        // ------A1------A2-------A3------
63
+        // -----------J1------------------
64
+        TreeMap<Long, String> addressRing = new TreeMap<Long, String>();
65
+        for (String address: addressList) {
66
+            for (int i = 0; i < VIRTUAL_NODE_NUM; i++) {
67
+                long addressHash = hash("SHARD-" + address + "-NODE-" + i);
68
+                addressRing.put(addressHash, address);
69
+            }
70
+        }
71
+
72
+        long jobHash = hash(String.valueOf(jobId));
73
+        SortedMap<Long, String> lastRing = addressRing.tailMap(jobHash);
74
+        if (!lastRing.isEmpty()) {
75
+            return lastRing.get(lastRing.firstKey());
76
+        }
77
+        return addressRing.firstEntry().getValue();
78
+    }
79
+
80
+    @Override
81
+    public ReturnT<String> routeRun(TriggerParam triggerParam, ArrayList<String> addressList, XxlJobLog jobLog) {
82
+        // address
83
+        String address = route(triggerParam.getJobId(), addressList);
84
+        jobLog.setExecutorAddress(address);
85
+
86
+        // run executor
87
+        ReturnT<String> runResult = runExecutor(triggerParam, address);
88
+        runResult.setMsg("<br>----------------------<br>" + runResult.getMsg());
89
+
90
+        return runResult;
91
+    }
80
 }
92
 }

+ 54 - 0
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFailover.java 查看文件

1
+package com.xxl.job.admin.core.route.strategy;
2
+
3
+import com.xxl.job.admin.core.model.XxlJobLog;
4
+import com.xxl.job.admin.core.route.ExecutorRouter;
5
+import com.xxl.job.core.biz.ExecutorBiz;
6
+import com.xxl.job.core.biz.model.ReturnT;
7
+import com.xxl.job.core.biz.model.TriggerParam;
8
+import com.xxl.job.core.rpc.netcom.NetComClientProxy;
9
+
10
+import java.util.ArrayList;
11
+
12
+/**
13
+ * Created by xuxueli on 17/3/10.
14
+ */
15
+public class ExecutorRouteFailover extends ExecutorRouter {
16
+
17
+    public String route(int jobId, ArrayList<String> addressList) {
18
+        return addressList.get(0);
19
+    }
20
+
21
+    @Override
22
+    public ReturnT<String> routeRun(TriggerParam triggerParam, ArrayList<String> addressList, XxlJobLog jobLog) {
23
+
24
+        StringBuffer beatResultSB = new StringBuffer();
25
+        for (String address : addressList) {
26
+            // beat
27
+            ReturnT<String> beatResult = null;
28
+            try {
29
+                ExecutorBiz executorBiz = (ExecutorBiz) new NetComClientProxy(ExecutorBiz.class, address).getObject();
30
+                beatResult = executorBiz.beat();
31
+            } catch (Exception e) {
32
+                logger.error(e.getMessage(), e);
33
+                beatResult = new ReturnT<String>(ReturnT.FAIL_CODE, ""+e );
34
+            }
35
+            beatResultSB.append("<br>----------------------<br>")
36
+                    .append("心跳检测:")
37
+                    .append("<br>address:").append(address)
38
+                    .append("<br>code:").append(beatResult.getCode())
39
+                    .append("<br>msg:").append(beatResult.getMsg());
40
+
41
+            // beat success
42
+            if (beatResult.getCode() == ReturnT.SUCCESS_CODE) {
43
+                jobLog.setExecutorAddress(address);
44
+
45
+                ReturnT<String> runResult = runExecutor(triggerParam, address);
46
+                beatResultSB.append("<br>----------------------<br>").append(runResult.getMsg());
47
+
48
+                return new ReturnT<String>(runResult.getCode(), beatResultSB.toString());
49
+            }
50
+        }
51
+        return new ReturnT<String>(ReturnT.FAIL_CODE, beatResultSB.toString());
52
+
53
+    }
54
+}

+ 16 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteFirst.java 查看文件

1
 package com.xxl.job.admin.core.route.strategy;
1
 package com.xxl.job.admin.core.route.strategy;
2
 
2
 
3
+import com.xxl.job.admin.core.model.XxlJobLog;
3
 import com.xxl.job.admin.core.route.ExecutorRouter;
4
 import com.xxl.job.admin.core.route.ExecutorRouter;
5
+import com.xxl.job.core.biz.model.ReturnT;
6
+import com.xxl.job.core.biz.model.TriggerParam;
4
 
7
 
5
 import java.util.ArrayList;
8
 import java.util.ArrayList;
6
 
9
 
9
  */
12
  */
10
 public class ExecutorRouteFirst extends ExecutorRouter {
13
 public class ExecutorRouteFirst extends ExecutorRouter {
11
 
14
 
12
-    @Override
13
     public String route(int jobId, ArrayList<String> addressList) {
15
     public String route(int jobId, ArrayList<String> addressList) {
14
         return addressList.get(0);
16
         return addressList.get(0);
15
     }
17
     }
16
 
18
 
19
+    @Override
20
+    public ReturnT<String> routeRun(TriggerParam triggerParam, ArrayList<String> addressList, XxlJobLog jobLog) {
21
+
22
+        // address
23
+        String address = route(triggerParam.getJobId(), addressList);
24
+        jobLog.setExecutorAddress(address);
25
+
26
+        // run executor
27
+        ReturnT<String> runResult = runExecutor(triggerParam, address);
28
+        runResult.setMsg("<br>----------------------<br>" + runResult.getMsg());
29
+
30
+        return runResult;
31
+    }
17
 }
32
 }

+ 17 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLFU.java 查看文件

1
 package com.xxl.job.admin.core.route.strategy;
1
 package com.xxl.job.admin.core.route.strategy;
2
 
2
 
3
+import com.xxl.job.admin.core.model.XxlJobLog;
3
 import com.xxl.job.admin.core.route.ExecutorRouter;
4
 import com.xxl.job.admin.core.route.ExecutorRouter;
5
+import com.xxl.job.core.biz.model.ReturnT;
6
+import com.xxl.job.core.biz.model.TriggerParam;
4
 
7
 
5
 import java.util.*;
8
 import java.util.*;
6
 import java.util.concurrent.ConcurrentHashMap;
9
 import java.util.concurrent.ConcurrentHashMap;
17
     private static ConcurrentHashMap<Integer, HashMap<String, Integer>> jobLfuMap = new ConcurrentHashMap<Integer, HashMap<String, Integer>>();
20
     private static ConcurrentHashMap<Integer, HashMap<String, Integer>> jobLfuMap = new ConcurrentHashMap<Integer, HashMap<String, Integer>>();
18
     private static long CACHE_VALID_TIME = 0;
21
     private static long CACHE_VALID_TIME = 0;
19
 
22
 
20
-    @Override
21
     public String route(int jobId, ArrayList<String> addressList) {
23
     public String route(int jobId, ArrayList<String> addressList) {
22
 
24
 
23
         // cache clear
25
         // cache clear
54
         return addressItem.getKey();
56
         return addressItem.getKey();
55
     }
57
     }
56
 
58
 
59
+    @Override
60
+    public ReturnT<String> routeRun(TriggerParam triggerParam, ArrayList<String> addressList, XxlJobLog jobLog) {
61
+
62
+        // address
63
+        String address = route(triggerParam.getJobId(), addressList);
64
+        jobLog.setExecutorAddress(address);
65
+
66
+        // run executor
67
+        ReturnT<String> runResult = runExecutor(triggerParam, address);
68
+        runResult.setMsg("<br>----------------------<br>" + runResult.getMsg());
69
+
70
+        return runResult;
71
+    }
72
+
57
 }
73
 }

+ 18 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLRU.java 查看文件

1
 package com.xxl.job.admin.core.route.strategy;
1
 package com.xxl.job.admin.core.route.strategy;
2
 
2
 
3
+import com.xxl.job.admin.core.model.XxlJobLog;
3
 import com.xxl.job.admin.core.route.ExecutorRouter;
4
 import com.xxl.job.admin.core.route.ExecutorRouter;
5
+import com.xxl.job.core.biz.model.ReturnT;
6
+import com.xxl.job.core.biz.model.TriggerParam;
4
 
7
 
5
 import java.util.ArrayList;
8
 import java.util.ArrayList;
6
 import java.util.LinkedHashMap;
9
 import java.util.LinkedHashMap;
18
     private static ConcurrentHashMap<Integer, LinkedHashMap<String, String>> jobLRUMap = new ConcurrentHashMap<Integer, LinkedHashMap<String, String>>();
21
     private static ConcurrentHashMap<Integer, LinkedHashMap<String, String>> jobLRUMap = new ConcurrentHashMap<Integer, LinkedHashMap<String, String>>();
19
     private static long CACHE_VALID_TIME = 0;
22
     private static long CACHE_VALID_TIME = 0;
20
 
23
 
21
-    @Override
22
     public String route(int jobId, ArrayList<String> addressList) {
24
     public String route(int jobId, ArrayList<String> addressList) {
23
 
25
 
24
         // cache clear
26
         // cache clear
52
         return eldestValue;
54
         return eldestValue;
53
     }
55
     }
54
 
56
 
57
+
58
+    @Override
59
+    public ReturnT<String> routeRun(TriggerParam triggerParam, ArrayList<String> addressList, XxlJobLog jobLog) {
60
+
61
+        // address
62
+        String address = route(triggerParam.getJobId(), addressList);
63
+        jobLog.setExecutorAddress(address);
64
+
65
+        // run executor
66
+        ReturnT<String> runResult = runExecutor(triggerParam, address);
67
+        runResult.setMsg("<br>----------------------<br>" + runResult.getMsg());
68
+
69
+        return runResult;
70
+    }
71
+
55
 }
72
 }

+ 15 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteLast.java 查看文件

1
 package com.xxl.job.admin.core.route.strategy;
1
 package com.xxl.job.admin.core.route.strategy;
2
 
2
 
3
+import com.xxl.job.admin.core.model.XxlJobLog;
3
 import com.xxl.job.admin.core.route.ExecutorRouter;
4
 import com.xxl.job.admin.core.route.ExecutorRouter;
5
+import com.xxl.job.core.biz.model.ReturnT;
6
+import com.xxl.job.core.biz.model.TriggerParam;
4
 
7
 
5
 import java.util.ArrayList;
8
 import java.util.ArrayList;
6
 
9
 
9
  */
12
  */
10
 public class ExecutorRouteLast extends ExecutorRouter {
13
 public class ExecutorRouteLast extends ExecutorRouter {
11
 
14
 
12
-    @Override
13
     public String route(int jobId, ArrayList<String> addressList) {
15
     public String route(int jobId, ArrayList<String> addressList) {
14
         return addressList.get(addressList.size()-1);
16
         return addressList.get(addressList.size()-1);
15
     }
17
     }
16
 
18
 
19
+    @Override
20
+    public ReturnT<String> routeRun(TriggerParam triggerParam, ArrayList<String> addressList, XxlJobLog jobLog) {
21
+        // address
22
+        String address = route(triggerParam.getJobId(), addressList);
23
+        jobLog.setExecutorAddress(address);
24
+
25
+        // run executor
26
+        ReturnT<String> runResult = runExecutor(triggerParam, address);
27
+        runResult.setMsg("<br>----------------------<br>" + runResult.getMsg());
28
+
29
+        return runResult;
30
+    }
17
 }
31
 }

+ 16 - 1
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRandom.java 查看文件

1
 package com.xxl.job.admin.core.route.strategy;
1
 package com.xxl.job.admin.core.route.strategy;
2
 
2
 
3
+import com.xxl.job.admin.core.model.XxlJobLog;
3
 import com.xxl.job.admin.core.route.ExecutorRouter;
4
 import com.xxl.job.admin.core.route.ExecutorRouter;
5
+import com.xxl.job.core.biz.model.ReturnT;
6
+import com.xxl.job.core.biz.model.TriggerParam;
4
 
7
 
5
 import java.util.ArrayList;
8
 import java.util.ArrayList;
6
 import java.util.Random;
9
 import java.util.Random;
12
 
15
 
13
     private static Random localRandom = new Random();
16
     private static Random localRandom = new Random();
14
 
17
 
15
-    @Override
16
     public String route(int jobId, ArrayList<String> addressList) {
18
     public String route(int jobId, ArrayList<String> addressList) {
17
         // Collections.shuffle(addressList);
19
         // Collections.shuffle(addressList);
18
         return addressList.get(localRandom.nextInt(addressList.size()));
20
         return addressList.get(localRandom.nextInt(addressList.size()));
19
     }
21
     }
20
 
22
 
23
+    @Override
24
+    public ReturnT<String> routeRun(TriggerParam triggerParam, ArrayList<String> addressList, XxlJobLog jobLog) {
25
+        // address
26
+        String address = route(triggerParam.getJobId(), addressList);
27
+        jobLog.setExecutorAddress(address);
28
+
29
+        // run executor
30
+        ReturnT<String> runResult = runExecutor(triggerParam, address);
31
+        runResult.setMsg("<br>----------------------<br>" + runResult.getMsg());
32
+
33
+        return runResult;
34
+    }
35
+
21
 }
36
 }

+ 18 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/core/route/strategy/ExecutorRouteRound.java 查看文件

1
 package com.xxl.job.admin.core.route.strategy;
1
 package com.xxl.job.admin.core.route.strategy;
2
 
2
 
3
+import com.xxl.job.admin.core.model.XxlJobLog;
3
 import com.xxl.job.admin.core.route.ExecutorRouter;
4
 import com.xxl.job.admin.core.route.ExecutorRouter;
5
+import com.xxl.job.core.biz.model.ReturnT;
6
+import com.xxl.job.core.biz.model.TriggerParam;
4
 
7
 
5
 import java.util.ArrayList;
8
 import java.util.ArrayList;
6
 import java.util.Random;
9
 import java.util.Random;
27
         return count;
30
         return count;
28
     }
31
     }
29
 
32
 
30
-    @Override
31
     public String route(int jobId, ArrayList<String> addressList) {
33
     public String route(int jobId, ArrayList<String> addressList) {
34
+        return addressList.get(count(jobId)%addressList.size());
35
+    }
32
 
36
 
33
 
37
 
38
+    @Override
39
+    public ReturnT<String> routeRun(TriggerParam triggerParam, ArrayList<String> addressList, XxlJobLog jobLog) {
34
 
40
 
35
-        return addressList.get(count(jobId)%addressList.size());
36
-    }
41
+        // address
42
+        String address = route(triggerParam.getJobId(), addressList);
43
+        jobLog.setExecutorAddress(address);
44
+
45
+        // run executor
46
+        ReturnT<String> runResult = runExecutor(triggerParam, address);
47
+        runResult.setMsg("<br>----------------------<br>" + runResult.getMsg());
48
+
49
+        return runResult;
37
 
50
 
51
+
52
+    }
38
 }
53
 }