Explorar el Código

任务回调逻辑优化

xueli.xue hace 9 años
padre
commit
aba36d3139

+ 3 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/core/callback/XxlJobLogCallbackServerHandler.java Ver fichero

@@ -28,15 +28,15 @@ public class XxlJobLogCallbackServerHandler extends AbstractHandler {
28 28
 		httpServletResponse.setCharacterEncoding("UTF-8");
29 29
 
30 30
 		// parse param
31
-		String trigger_log_id = httpServletRequest.getParameter("trigger_log_id");
31
+		String log_id = httpServletRequest.getParameter("log_id");
32 32
 		String status = httpServletRequest.getParameter("status");
33 33
 		String msg = httpServletRequest.getParameter("msg");
34 34
 		
35 35
 		// process
36 36
 		RemoteCallBack callBack = new RemoteCallBack();
37 37
 		callBack.setStatus(RemoteCallBack.FAIL);
38
-		if (StringUtils.isNumeric(trigger_log_id) && StringUtils.isNotBlank(status)) {
39
-			XxlJobLog log = DynamicSchedulerUtil.xxlJobLogDao.load(Integer.valueOf(trigger_log_id));
38
+		if (StringUtils.isNumeric(log_id) && StringUtils.isNotBlank(status)) {
39
+			XxlJobLog log = DynamicSchedulerUtil.xxlJobLogDao.load(Integer.valueOf(log_id));
40 40
 			if (log!=null) {
41 41
 				log.setHandleTime(new Date());
42 42
 				log.setHandleStatus(status);

+ 11 - 11
xxl-job-admin/src/main/webapp/static/js/jobinfo.index.1.js Ver fichero

@@ -317,27 +317,27 @@ $(function() {
317 317
 	// GLUE模式开启
318 318
 	$("#addModal .form .ifGLUE").click(function(){
319 319
 		var ifGLUE = $(this).is(':checked');
320
-		var $handler_name = $("#addModal .form input[name='handler_name']");
320
+		var $executorHandler = $("#addModal .form input[name='executorHandler']");
321 321
 		var $glueSwitch = $("#addModal .form input[name='glueSwitch']");
322 322
 		if (ifGLUE) {
323
-			$handler_name.val("");
324
-			$handler_name.attr("readonly","readonly");
323
+			$executorHandler.val("");
324
+			$executorHandler.attr("readonly","readonly");
325 325
 			$glueSwitch.val(1);
326 326
 		} else {
327
-			$handler_name.removeAttr("readonly");
327
+			$executorHandler.removeAttr("readonly");
328 328
 			$glueSwitch.val(0);
329 329
 		}
330 330
 	});
331 331
 	$("#updateModal .form .ifGLUE").click(function(){
332 332
 		var ifGLUE = $(this).is(':checked');
333
-		var $handler_name = $("#updateModal .form input[name='handler_name']");
333
+		var $executorHandler = $("#updateModal .form input[name='executorHandler']");
334 334
 		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
335 335
 		if (ifGLUE) {
336
-			$handler_name.val("");
337
-			$handler_name.attr("readonly","readonly");
336
+			$executorHandler.val("");
337
+			$executorHandler.attr("readonly","readonly");
338 338
 			$glueSwitch.val(1);
339 339
 		} else {
340
-			$handler_name.removeAttr("readonly");
340
+			$executorHandler.removeAttr("readonly");
341 341
 			$glueSwitch.val(0);
342 342
 		}
343 343
 	});
@@ -358,12 +358,12 @@ $(function() {
358 358
 		
359 359
 		// GLUE check
360 360
 		var $glueSwitch = $("#updateModal .form input[name='glueSwitch']");
361
-		var $handler_name = $("#updateModal .form input[name='handler_name']");
361
+		var $executorHandler = $("#updateModal .form input[name='executorHandler']");
362 362
 		if ($glueSwitch.val() != 0) {
363
-			$handler_name.attr("readonly","readonly");
363
+			$executorHandler.attr("readonly","readonly");
364 364
 			$("#updateModal .form .ifGLUE").attr("checked", true);
365 365
 		} else {
366
-			$handler_name.removeAttr("readonly");
366
+			$executorHandler.removeAttr("readonly");
367 367
 			$("#updateModal .form .ifGLUE").attr("checked", false);
368 368
 		}
369 369
 		

+ 30 - 0
xxl-job-core/src/main/java/com/xxl/job/core/handler/HandlerRepository.java Ver fichero

@@ -1,14 +1,17 @@
1 1
 package com.xxl.job.core.handler;
2 2
 
3 3
 import java.util.Date;
4
+import java.util.HashMap;
4 5
 import java.util.Map;
5 6
 import java.util.concurrent.ConcurrentHashMap;
7
+import java.util.concurrent.LinkedBlockingQueue;
6 8
 
7 9
 import org.slf4j.Logger;
8 10
 import org.slf4j.LoggerFactory;
9 11
 
10 12
 import com.xxl.job.core.handler.impl.GlueJobHandler;
11 13
 import com.xxl.job.core.log.XxlJobFileAppender;
14
+import com.xxl.job.core.util.HttpUtil;
12 15
 import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
13 16
 import com.xxl.job.core.util.JacksonUtil;
14 17
 
@@ -195,4 +198,31 @@ public class HandlerRepository {
195 198
 		return JacksonUtil.writeValueAsString(callback); 
196 199
 	}
197 200
 	
201
+	// ----------------------- for callback log -----------------------
202
+	private static LinkedBlockingQueue<HashMap<String, String>> callBackQueue = new LinkedBlockingQueue<HashMap<String, String>>();
203
+	static {
204
+		new Thread(new Runnable() {
205
+			@Override
206
+			public void run() {
207
+				try {
208
+					HashMap<String, String> item = callBackQueue.poll();
209
+					if (item != null) {
210
+						RemoteCallBack callback = null;
211
+						try {
212
+							callback = HttpUtil.post(item.get("_address"), item);
213
+						} catch (Exception e) {
214
+							logger.info("HandlerThread Exception:", e);
215
+						}
216
+						logger.info(">>>>>>>>>>> xxl-job callback , params:{}, result:{}", new Object[]{item, callback});
217
+					} 
218
+				} catch (Exception e) {
219
+				}
220
+			}
221
+		});
222
+	}
223
+	public static void pushCallBack(String address, HashMap<String, String> params){
224
+		params.put("_address", address);
225
+		callBackQueue.add(params);
226
+	}
227
+	
198 228
 }

+ 11 - 18
xxl-job-core/src/main/java/com/xxl/job/core/handler/HandlerThread.java Ver fichero

@@ -15,7 +15,6 @@ import com.xxl.job.core.handler.HandlerRepository.HandlerParamEnum;
15 15
 import com.xxl.job.core.handler.IJobHandler.JobHandleStatus;
16 16
 import com.xxl.job.core.log.XxlJobFileAppender;
17 17
 import com.xxl.job.core.util.HttpUtil;
18
-import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
19 18
 
20 19
 /**
21 20
  * handler thread
@@ -61,10 +60,10 @@ public class HandlerThread extends Thread{
61 60
 				Map<String, String> handlerData = handlerDataQueue.poll();
62 61
 				if (handlerData!=null) {
63 62
 					i= 0;
64
-					String trigger_log_address = handlerData.get(HandlerParamEnum.LOG_ADDRESS.name());
65
-					String trigger_log_id = handlerData.get(HandlerParamEnum.LOG_ID.name());
63
+					String log_address = handlerData.get(HandlerParamEnum.LOG_ADDRESS.name());
64
+					String log_id = handlerData.get(HandlerParamEnum.LOG_ID.name());
66 65
 					String handler_params = handlerData.get(HandlerParamEnum.EXECUTOR_PARAMS.name());
67
-					logIdSet.remove(trigger_log_id);
66
+					logIdSet.remove(log_id);
68 67
 					
69 68
 					// parse param
70 69
 					String[] handlerParams = null; 
@@ -78,7 +77,7 @@ public class HandlerThread extends Thread{
78 77
 					JobHandleStatus _status = JobHandleStatus.FAIL;
79 78
 					String _msg = null;
80 79
 					try {
81
-						XxlJobFileAppender.contextHolder.set(trigger_log_id);
80
+						XxlJobFileAppender.contextHolder.set(log_id);
82 81
 						logger.info(">>>>>>>>>>> xxl-job handle start.");
83 82
 						_status = handler.execute(handlerParams);
84 83
 					} catch (Exception e) {
@@ -89,21 +88,15 @@ public class HandlerThread extends Thread{
89 88
 					}
90 89
 					logger.info(">>>>>>>>>>> xxl-job handle end, handlerParams:{}, _status:{}, _msg:{}", 
91 90
 							new Object[]{handlerParams, _status, _msg});
92
-
91
+					
93 92
 					// callback handler info
94
-					HashMap<String, String> params = new HashMap<String, String>();
95
-					params.put("trigger_log_id", trigger_log_id);
96
-					params.put("status", _status.name());
97
-					params.put("msg", _msg);
98
-					RemoteCallBack callback = null;
99
-					logger.info(">>>>>>>>>>> xxl-job callback start.");
100
-					try {
101
-						callback = HttpUtil.post(HttpUtil.addressToUrl(trigger_log_address), params);
102
-					} catch (Exception e) {
103
-						logger.info("HandlerThread Exception:", e);
93
+					if (!toStop) {
94
+						HashMap<String, String> params = new HashMap<String, String>();
95
+						params.put("log_id", log_id);
96
+						params.put("status", _status.name());
97
+						params.put("msg", _msg);
98
+						HandlerRepository.pushCallBack(HttpUtil.addressToUrl(log_address), params);
104 99
 					}
105
-					logger.info(">>>>>>>>>>> xxl-job callback end, params:{}, result:{}", new Object[]{params, callback.toString()});
106
-					
107 100
 				} else {
108 101
 					i++;
109 102
 					logIdSet.clear();

+ 7 - 0
xxl-job-executor-example/src/main/java/com/xxl/job/executor/service/jobhandler/DemoJobHandler.java Ver fichero

@@ -1,5 +1,7 @@
1 1
 package com.xxl.job.executor.service.jobhandler;
2 2
 
3
+import java.util.concurrent.TimeUnit;
4
+
3 5
 import org.slf4j.Logger;
4 6
 import org.slf4j.LoggerFactory;
5 7
 import org.springframework.stereotype.Service;
@@ -26,6 +28,11 @@ public class DemoJobHandler extends IJobHandler {
26 28
 	@Override
27 29
 	public JobHandleStatus execute(String... params) throws Exception {
28 30
 		logger.info("XXL-JOB, Hello World.");
31
+		
32
+		for (int i = 0; i < 10; i++) {
33
+			System.out.println(i);
34
+			TimeUnit.SECONDS.sleep(2);
35
+		}
29 36
 		return JobHandleStatus.SUCCESS;
30 37
 	}
31 38