Bläddra i källkod

任务回调逻辑优化

xueli.xue 9 år sedan
förälder
incheckning
aba36d3139

+ 3 - 3
xxl-job-admin/src/main/java/com/xxl/job/admin/core/callback/XxlJobLogCallbackServerHandler.java Visa fil

28
 		httpServletResponse.setCharacterEncoding("UTF-8");
28
 		httpServletResponse.setCharacterEncoding("UTF-8");
29
 
29
 
30
 		// parse param
30
 		// parse param
31
-		String trigger_log_id = httpServletRequest.getParameter("trigger_log_id");
31
+		String log_id = httpServletRequest.getParameter("log_id");
32
 		String status = httpServletRequest.getParameter("status");
32
 		String status = httpServletRequest.getParameter("status");
33
 		String msg = httpServletRequest.getParameter("msg");
33
 		String msg = httpServletRequest.getParameter("msg");
34
 		
34
 		
35
 		// process
35
 		// process
36
 		RemoteCallBack callBack = new RemoteCallBack();
36
 		RemoteCallBack callBack = new RemoteCallBack();
37
 		callBack.setStatus(RemoteCallBack.FAIL);
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
 			if (log!=null) {
40
 			if (log!=null) {
41
 				log.setHandleTime(new Date());
41
 				log.setHandleTime(new Date());
42
 				log.setHandleStatus(status);
42
 				log.setHandleStatus(status);

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

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

1
 package com.xxl.job.core.handler;
1
 package com.xxl.job.core.handler;
2
 
2
 
3
 import java.util.Date;
3
 import java.util.Date;
4
+import java.util.HashMap;
4
 import java.util.Map;
5
 import java.util.Map;
5
 import java.util.concurrent.ConcurrentHashMap;
6
 import java.util.concurrent.ConcurrentHashMap;
7
+import java.util.concurrent.LinkedBlockingQueue;
6
 
8
 
7
 import org.slf4j.Logger;
9
 import org.slf4j.Logger;
8
 import org.slf4j.LoggerFactory;
10
 import org.slf4j.LoggerFactory;
9
 
11
 
10
 import com.xxl.job.core.handler.impl.GlueJobHandler;
12
 import com.xxl.job.core.handler.impl.GlueJobHandler;
11
 import com.xxl.job.core.log.XxlJobFileAppender;
13
 import com.xxl.job.core.log.XxlJobFileAppender;
14
+import com.xxl.job.core.util.HttpUtil;
12
 import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
15
 import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
13
 import com.xxl.job.core.util.JacksonUtil;
16
 import com.xxl.job.core.util.JacksonUtil;
14
 
17
 
195
 		return JacksonUtil.writeValueAsString(callback); 
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 Visa fil

15
 import com.xxl.job.core.handler.IJobHandler.JobHandleStatus;
15
 import com.xxl.job.core.handler.IJobHandler.JobHandleStatus;
16
 import com.xxl.job.core.log.XxlJobFileAppender;
16
 import com.xxl.job.core.log.XxlJobFileAppender;
17
 import com.xxl.job.core.util.HttpUtil;
17
 import com.xxl.job.core.util.HttpUtil;
18
-import com.xxl.job.core.util.HttpUtil.RemoteCallBack;
19
 
18
 
20
 /**
19
 /**
21
  * handler thread
20
  * handler thread
61
 				Map<String, String> handlerData = handlerDataQueue.poll();
60
 				Map<String, String> handlerData = handlerDataQueue.poll();
62
 				if (handlerData!=null) {
61
 				if (handlerData!=null) {
63
 					i= 0;
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
 					String handler_params = handlerData.get(HandlerParamEnum.EXECUTOR_PARAMS.name());
65
 					String handler_params = handlerData.get(HandlerParamEnum.EXECUTOR_PARAMS.name());
67
-					logIdSet.remove(trigger_log_id);
66
+					logIdSet.remove(log_id);
68
 					
67
 					
69
 					// parse param
68
 					// parse param
70
 					String[] handlerParams = null; 
69
 					String[] handlerParams = null; 
78
 					JobHandleStatus _status = JobHandleStatus.FAIL;
77
 					JobHandleStatus _status = JobHandleStatus.FAIL;
79
 					String _msg = null;
78
 					String _msg = null;
80
 					try {
79
 					try {
81
-						XxlJobFileAppender.contextHolder.set(trigger_log_id);
80
+						XxlJobFileAppender.contextHolder.set(log_id);
82
 						logger.info(">>>>>>>>>>> xxl-job handle start.");
81
 						logger.info(">>>>>>>>>>> xxl-job handle start.");
83
 						_status = handler.execute(handlerParams);
82
 						_status = handler.execute(handlerParams);
84
 					} catch (Exception e) {
83
 					} catch (Exception e) {
89
 					}
88
 					}
90
 					logger.info(">>>>>>>>>>> xxl-job handle end, handlerParams:{}, _status:{}, _msg:{}", 
89
 					logger.info(">>>>>>>>>>> xxl-job handle end, handlerParams:{}, _status:{}, _msg:{}", 
91
 							new Object[]{handlerParams, _status, _msg});
90
 							new Object[]{handlerParams, _status, _msg});
92
-
91
+					
93
 					// callback handler info
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
 				} else {
100
 				} else {
108
 					i++;
101
 					i++;
109
 					logIdSet.clear();
102
 					logIdSet.clear();

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

1
 package com.xxl.job.executor.service.jobhandler;
1
 package com.xxl.job.executor.service.jobhandler;
2
 
2
 
3
+import java.util.concurrent.TimeUnit;
4
+
3
 import org.slf4j.Logger;
5
 import org.slf4j.Logger;
4
 import org.slf4j.LoggerFactory;
6
 import org.slf4j.LoggerFactory;
5
 import org.springframework.stereotype.Service;
7
 import org.springframework.stereotype.Service;
26
 	@Override
28
 	@Override
27
 	public JobHandleStatus execute(String... params) throws Exception {
29
 	public JobHandleStatus execute(String... params) throws Exception {
28
 		logger.info("XXL-JOB, Hello World.");
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
 		return JobHandleStatus.SUCCESS;
36
 		return JobHandleStatus.SUCCESS;
30
 	}
37
 	}
31
 	
38