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();