From 837ab404b1c7d32c5a1c703f1ecaaa7b9911f634 Mon Sep 17 00:00:00 2001
From: xuxueli <931591021@qq.com>
Date: Sat, 26 Aug 2017 13:28:58 +0800
Subject: [PATCH] =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=99=A8=E6=B3=A8=E5=86=8C?=
=?UTF-8?q?=E7=BA=BF=E7=A8=8B=E4=BC=98=E5=8C=96=EF=BC=8C=E7=BA=BF=E7=A8=8B?=
=?UTF-8?q?=E9=94=80=E6=AF=81=E6=97=B6=E4=B8=BB=E5=8A=A8=E6=91=98=E9=99=A4?=
=?UTF-8?q?=E6=B3=A8=E5=86=8C=E6=9C=BA=E5=99=A8=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
doc/XXL-JOB官方文档.md | 8 +++--
.../job/admin/service/impl/AdminBizImpl.java | 2 +-
.../admin/service/impl/XxlJobServiceImpl.java | 6 ++--
.../job/core/biz/impl/ExecutorBizImpl.java | 2 +-
.../rpc/netcom/jetty/server/JettyServer.java | 30 +++++++++----------
.../core/thread/ExecutorRegistryThread.java | 8 +++++
.../core/thread/TriggerCallbackThread.java | 8 +++++
.../com/xxl/job/core/util/HttpClientUtil.java | 2 +-
8 files changed, 42 insertions(+), 24 deletions(-)
diff --git a/doc/XXL-JOB官方文档.md b/doc/XXL-JOB官方文档.md
index 4e463b3d..de28ce54 100644
--- a/doc/XXL-JOB官方文档.md
+++ b/doc/XXL-JOB官方文档.md
@@ -739,8 +739,10 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过
自v1.5版本之后, 任务取消了"任务执行机器"属性, 改为通过任务注册和自动发现的方式, 动态获取远程执行器地址并执行。
AppName: 每个执行器机器集群的唯一标示, 任务注册以 "执行器" 为最小粒度进行注册; 每个任务通过其绑定的执行器可感知对应的执行器机器列表;
- Beat: 任务注册心跳周期, 默认15s; 执行器以一倍Beat进行执行器注册, 调度中心以一倍Beat进行动态任务发现; 注册信息的失效时间被两倍Beat;
注册表: 见"XXL_JOB_QRTZ_TRIGGER_REGISTRY"表, "执行器" 在进行任务注册时将会周期性维护一条注册记录,即机器地址和AppName的绑定关系; "调度中心" 从而可以动态感知每个AppName在线的机器列表;
+ 执行器注册: 任务注册Beat周期默认30s; 执行器以一倍Beat进行执行器注册, 调度中心以一倍Beat进行动态任务发现; 注册信息的失效时间被三倍Beat;
+ 执行器注册摘除:执行器销毁时,将会主动上报调度中心并摘除对应的执行器机器信息,提高心跳注册的实时性;
+
为保证系统"轻量级"并且降低学习部署成本,没有采用Zookeeper作为注册中心,采用DB方式进行任务注册发现;
@@ -986,8 +988,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
- 3、新增JFinal类型执行器sample示例项目;
- 4、执行器手动设置IP时将会绑定Host;
- 5、项目主页搭建,提供中英文文档;
-- 6、执行器回调线程优化,线程销毁前批量回调队列中所有数据;
-- 7、执行器注册线程优化,线程销毁时主动摘除注册机器;
+- 6、执行器回调线程优化,线程销毁前批量回调队列中数据,防止任务结果丢失;
+- 7、执行器注册线程优化,线程销毁时主动摘除注册机器信息,提高执行器注册的实时性;
### TODO LIST
- 1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
index f185264d..77176e42 100644
--- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
+++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
@@ -73,7 +73,7 @@ public class AdminBizImpl implements AdminBiz {
childTriggerMsg += MessageFormat.format("
{0}/{1} 触发子任务成功, 子任务Key: {2}, status: {3}, 子任务描述: {4}",
(i+1), childJobKeys.length, childJobKeys[i], ret, childJobInfo.getJobDesc());
} catch (SchedulerException e) {
- logger.error("", e);
+ logger.error(e.getMessage(), e);
}
} else {
childTriggerMsg += MessageFormat.format("
{0}/{1} 触发子任务失败, 子任务xxlJobInfo不存在, 子任务Key: {2}",
diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
index 6845a4ef..60490fb6 100644
--- a/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
+++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
@@ -132,12 +132,12 @@ public class XxlJobServiceImpl implements XxlJobService {
//XxlJobDynamicScheduler.pauseJob(qz_name, qz_group);
return ReturnT.SUCCESS;
} catch (SchedulerException e) {
- logger.error("", e);
+ logger.error(e.getMessage(), e);
try {
xxlJobInfoDao.delete(jobInfo.getId());
XxlJobDynamicScheduler.removeJob(qz_name, qz_group);
} catch (SchedulerException e1) {
- logger.error("", e1);
+ logger.error(e.getMessage(), e1);
}
return new ReturnT(ReturnT.FAIL_CODE, "新增任务失败:" + e.getMessage());
}
@@ -207,7 +207,7 @@ public class XxlJobServiceImpl implements XxlJobService {
boolean ret = XxlJobDynamicScheduler.rescheduleJob(qz_group, qz_name, exists_jobInfo.getJobCron());
return ret?ReturnT.SUCCESS:ReturnT.FAIL;
} catch (SchedulerException e) {
- logger.error("", e);
+ logger.error(e.getMessage(), e);
}
return ReturnT.FAIL;
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java b/xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java
index c7189e43..ec62f853 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java
@@ -115,7 +115,7 @@ public class ExecutorBizImpl implements ExecutorBiz {
IJobHandler originJobHandler = GlueFactory.getInstance().loadNewInstance(triggerParam.getGlueSource());
jobHandler = new GlueJobHandler(originJobHandler, triggerParam.getGlueUpdatetime());
} catch (Exception e) {
- logger.error("", e);
+ logger.error(e.getMessage(), e);
return new ReturnT(ReturnT.FAIL_CODE, e.getMessage());
}
}
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServer.java b/xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServer.java
index 62754f3a..76730ec0 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServer.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServer.java
@@ -55,9 +55,9 @@ public class JettyServer {
server.join(); // block until thread stopped
logger.info(">>>>>>>>>>> xxl-rpc server join success, netcon={}, port={}", JettyServer.class.getName(), port);
} catch (Exception e) {
- logger.error("", e);
+ logger.error(e.getMessage(), e);
} finally {
- destroy();
+ //destroy();
}
}
});
@@ -67,25 +67,25 @@ public class JettyServer {
public void destroy() {
- // destroy server
- if (server != null) {
- try {
- server.stop();
- server.destroy();
- } catch (Exception e) {
- logger.error("", e);
- }
- }
- if (thread.isAlive()) {
- thread.interrupt();
- }
-
// destroy Registry-Server
ExecutorRegistryThread.getInstance().toStop();
// destroy Callback-Server
TriggerCallbackThread.getInstance().toStop();
+ // destroy server
+ if (server != null) {
+ try {
+ server.stop();
+ server.destroy();
+ } catch (Exception e) {
+ logger.error(e.getMessage(), e);
+ }
+ }
+ if (thread.isAlive()) {
+ thread.interrupt();
+ }
+
logger.info(">>>>>>>>>>> xxl-rpc server destroy success, netcon={}", JettyServer.class.getName());
}
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java b/xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java
index 1a5adc65..02ccf23b 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java
@@ -99,6 +99,7 @@ public class ExecutorRegistryThread extends Thread {
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
+ logger.warn(">>>>>>>>>>>> xxl-job, executor registry thread destory.");
}
});
@@ -108,6 +109,13 @@ public class ExecutorRegistryThread extends Thread {
public void toStop() {
toStop = true;
+ // interrupt and wait
+ registryThread.interrupt();
+ try {
+ registryThread.join();
+ } catch (InterruptedException e) {
+ logger.error(e.getMessage(), e);
+ }
}
}
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/thread/TriggerCallbackThread.java b/xxl-job-core/src/main/java/com/xxl/job/core/thread/TriggerCallbackThread.java
index c5d05775..9126c4a3 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/thread/TriggerCallbackThread.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/thread/TriggerCallbackThread.java
@@ -80,6 +80,7 @@ public class TriggerCallbackThread {
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
+ logger.warn(">>>>>>>>>>>> xxl-job, executor callback thread destory.");
}
});
@@ -88,6 +89,13 @@ public class TriggerCallbackThread {
}
public void toStop(){
toStop = true;
+ // interrupt and wait
+ triggerCallbackThread.interrupt();
+ try {
+ triggerCallbackThread.join();
+ } catch (InterruptedException e) {
+ logger.error(e.getMessage(), e);
+ }
}
/**
diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/util/HttpClientUtil.java b/xxl-job-core/src/main/java/com/xxl/job/core/util/HttpClientUtil.java
index da941a33..fe0c1309 100644
--- a/xxl-job-core/src/main/java/com/xxl/job/core/util/HttpClientUtil.java
+++ b/xxl-job-core/src/main/java/com/xxl/job/core/util/HttpClientUtil.java
@@ -62,7 +62,7 @@ public class HttpClientUtil {
EntityUtils.consume(entity);
}
} catch (Exception e) {
- logger.error("", e);
+ logger.error(e.getMessage(), e);
throw e;
} finally {
httpPost.releaseConnection();