浏览代码

更新用户手册

xueli.xue 9 年前
父节点
当前提交
9a364e0b3a

+ 15 - 12
README.md 查看文件

7
 
7
 
8
 技术交流群(仅作技术交流):367260654    [![image](http://pub.idqqimg.com/wpa/images/group.png)](http://shang.qq.com/wpa/qunwpa?idkey=4686e3fe01118445c75673a66b4cc6b2c7ce0641528205b6f403c179062b0a52)
8
 技术交流群(仅作技术交流):367260654    [![image](http://pub.idqqimg.com/wpa/images/group.png)](http://shang.qq.com/wpa/qunwpa?idkey=4686e3fe01118445c75673a66b4cc6b2c7ce0641528205b6f403c179062b0a52)
9
 
9
 
10
-# 特点:集群任务调度管理
10
+# 特点:
11
 	1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
11
 	1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
12
-	2、动态:支持动态修改任务状态,动态暂停/恢复任务,即时生效;
13
-	3、服务HA:任务信息持久化到mysql中,Job服务天然支持集群,保证服务HA;
14
-	4、任务HA:某台Job服务挂掉,任务会平滑分配给其他的某一台存活服务,即使所有服务挂掉,重启时或补偿执行丢失任务;
15
-	5、一个任务只会在其中一台服务器上执行;
16
-	6、任务串行执行;
17
-	7、支持任务执行日志;
18
-	8、支持自定义参数;
19
-	9、支持任务失败次数超阈值邮件报警;
20
-	10、支持在线查看,执行器详细日志;
21
-	11、支持远程任务执行终止;
22
-	12、支持登录验证;
12
+	2、动态:支持动态修改任务状态、暂停/恢复任务,以及终止运行中任务,即时生效;
13
+	3、调度HA:“调度中心”基于集群Quartz实现,可保证调度中心HA;
14
+	4、任务HA:任务支持多地址配置,可保证任务HA(Failover);
15
+	5、一致性:“调度中心”通过DB锁保证集群分布式调度的一致性;
16
+	6、自定义任务参数:支持在线配置调度任务入参,即时生效;
17
+	7、调度线程池:调度系统多线程触发调度运行,确保调度精确执行,不被堵塞;
18
+	8、执行日志:支持在线查看调度结果,并且查看完整的执行日志;
19
+	9、邮件报警:任务失败时支持邮件报警,同时可自定义失败次数阀值;
20
+	10、支持登录验证;
23
 	
21
 	
24
 # 新版本 V1.1.x,特性【于V1.1.x版本,XXL-JOB正式应用于我司,内部定制别名为 “Ferrari”,新接入应用推荐使用最新版本V1.3.x】
22
 # 新版本 V1.1.x,特性【于V1.1.x版本,XXL-JOB正式应用于我司,内部定制别名为 “Ferrari”,新接入应用推荐使用最新版本V1.3.x】
25
 	1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
23
 	1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
66
 		/doc --------------------------------- 用户手册
64
 		/doc --------------------------------- 用户手册
67
 	2、在新的目录结构上,升级了用户手册;
65
 	2、在新的目录结构上,升级了用户手册;
68
 	3、优化了一些交互和UI;
66
 	3、优化了一些交互和UI;
67
+	
68
+# 新版本1.3.2
69
+	1、调度逻辑进行事务包裹;
70
+	2、执行器异步回调执行日志;
71
+	3、【重要】在 “调度中心” 支持HA的基础上,扩展执行器的Failover支持,支持配置多执行期地址;
69
 
72
 
70
 # 源码目录说明
73
 # 源码目录说明
71
 	/xxl-job-admin					【调度中心】:负责管理调度信息,按照调度配置发出调度请求;
74
 	/xxl-job-admin					【调度中心】:负责管理调度信息,按照调度配置发出调度请求;

二进制
doc/XXL-JOB1.3.x用户手册_20160523_2012.docx 查看文件


+ 1 - 1
xxl-job-admin/pom.xml 查看文件

148
 		<dependency>
148
 		<dependency>
149
 			<groupId>com.xxl</groupId>
149
 			<groupId>com.xxl</groupId>
150
 			<artifactId>xxl-job-core</artifactId>
150
 			<artifactId>xxl-job-core</artifactId>
151
-			<version>1.3.1</version>
151
+			<version>1.3.2</version>
152
 		</dependency>
152
 		</dependency>
153
 
153
 
154
 	</dependencies>
154
 	</dependencies>

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

4
 import java.util.Date;
4
 import java.util.Date;
5
 import java.util.HashMap;
5
 import java.util.HashMap;
6
 
6
 
7
+import org.apache.commons.lang.StringUtils;
7
 import org.quartz.JobExecutionContext;
8
 import org.quartz.JobExecutionContext;
8
 import org.quartz.JobExecutionException;
9
 import org.quartz.JobExecutionException;
9
 import org.quartz.JobKey;
10
 import org.quartz.JobKey;
89
 		if (handler_address.split(",").length > 1) {
90
 		if (handler_address.split(",").length > 1) {
90
 			String failoverMessage = "";
91
 			String failoverMessage = "";
91
 			for (String address : handler_address.split(",")) {
92
 			for (String address : handler_address.split(",")) {
92
-				HashMap<String, String> params = new HashMap<String, String>();
93
-				params.put(HandlerParamEnum.TIMESTAMP.name(), String.valueOf(System.currentTimeMillis()));
94
-				params.put(HandlerParamEnum.ACTION.name(), ActionEnum.BEAT.name());
95
-				RemoteCallBack beatResult = HttpUtil.post(HttpUtil.addressToUrl(address), params);
96
-				failoverMessage += MessageFormat.format("BEAT running, <br>>>>[address] : {0}, <br>>>>[status] : {1}, <br>>>>[msg] : {2} <br><hr>", address, beatResult.getStatus(), beatResult.getMsg());
97
-				if (RemoteCallBack.SUCCESS.equals(beatResult.getStatus())) {
98
-					jobLog.setExecutorAddress(address);
99
-					RemoteCallBack triggerCallback = HttpUtil.post(HttpUtil.addressToUrl(address), handler_params);
100
-					triggerCallback.setStatus(RemoteCallBack.SUCCESS);
101
-					failoverMessage += MessageFormat.format("Trigger running, <br>>>>[address] : {0}, <br>>>>[status] : {1}, <br>>>>[msg] : {2} <br><hr>", address, triggerCallback.getStatus(), triggerCallback.getMsg());
102
-					triggerCallback.setMsg(failoverMessage);
103
-					return triggerCallback;
93
+				if (StringUtils.isNotBlank(address)) {
94
+					HashMap<String, String> params = new HashMap<String, String>();
95
+					params.put(HandlerParamEnum.TIMESTAMP.name(), String.valueOf(System.currentTimeMillis()));
96
+					params.put(HandlerParamEnum.ACTION.name(), ActionEnum.BEAT.name());
97
+					RemoteCallBack beatResult = HttpUtil.post(HttpUtil.addressToUrl(address), params);
98
+					failoverMessage += MessageFormat.format("BEAT running, <br>>>>[address] : {0}, <br>>>>[status] : {1}, <br>>>>[msg] : {2} <br><hr>", address, beatResult.getStatus(), beatResult.getMsg());
99
+					if (RemoteCallBack.SUCCESS.equals(beatResult.getStatus())) {
100
+						jobLog.setExecutorAddress(address);
101
+						RemoteCallBack triggerCallback = HttpUtil.post(HttpUtil.addressToUrl(address), handler_params);
102
+						triggerCallback.setStatus(RemoteCallBack.SUCCESS);
103
+						failoverMessage += MessageFormat.format("Trigger running, <br>>>>[address] : {0}, <br>>>>[status] : {1}, <br>>>>[msg] : {2} <br><hr>", address, triggerCallback.getStatus(), triggerCallback.getMsg());
104
+						triggerCallback.setMsg(failoverMessage);
105
+						return triggerCallback;
106
+					}
104
 				}
107
 				}
105
 			}
108
 			}
106
 			
109
 			

+ 1 - 1
xxl-job-core/pom.xml 查看文件

7
 		<version>1.3.0-SNAPSHOT</version>
7
 		<version>1.3.0-SNAPSHOT</version>
8
 	</parent>
8
 	</parent>
9
 	<artifactId>xxl-job-core</artifactId>
9
 	<artifactId>xxl-job-core</artifactId>
10
-	<version>1.3.1</version>
10
+	<version>1.3.2</version>
11
 
11
 
12
 	<dependencies>
12
 	<dependencies>
13
 
13
 

+ 1 - 1
xxl-job-executor-example/pom.xml 查看文件

79
 		<dependency>
79
 		<dependency>
80
 			<groupId>com.xxl</groupId>
80
 			<groupId>com.xxl</groupId>
81
 			<artifactId>xxl-job-core</artifactId>
81
 			<artifactId>xxl-job-core</artifactId>
82
-			<version>1.3.1</version>
82
+			<version>1.3.2</version>
83
 		</dependency>
83
 		</dependency>
84
 		
84
 		
85
 	</dependencies>
85
 	</dependencies>