Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
X
XXL-JOB
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
靳帅
XXL-JOB
Commits
837ab404
提交
837ab404
authored
8月 26, 2017
作者:
xuxueli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
执行器注册线程优化,线程销毁时主动摘除注册机器;
上级
7bc11fcb
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
36 行增加
和
18 行删除
+36
-18
XXL-JOB官方文档.md
doc/XXL-JOB官方文档.md
+5
-3
AdminBizImpl.java
...ain/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
+1
-1
XxlJobServiceImpl.java
...ava/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
+3
-3
ExecutorBizImpl.java
.../main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java
+1
-1
JettyServer.java
...com/xxl/job/core/rpc/netcom/jetty/server/JettyServer.java
+9
-9
ExecutorRegistryThread.java
.../java/com/xxl/job/core/thread/ExecutorRegistryThread.java
+8
-0
TriggerCallbackThread.java
...n/java/com/xxl/job/core/thread/TriggerCallbackThread.java
+8
-0
HttpClientUtil.java
...e/src/main/java/com/xxl/job/core/util/HttpClientUtil.java
+1
-1
没有找到文件。
doc/XXL-JOB官方文档.md
浏览文件 @
837ab404
...
@@ -739,8 +739,10 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过
...
@@ -739,8 +739,10 @@ XXL-JOB会为每次调度请求生成一个单独的日志文件,需要通过
自v1.5版本之后, 任务取消了"任务执行机器"属性, 改为通过任务注册和自动发现的方式, 动态获取远程执行器地址并执行。
自v1.5版本之后, 任务取消了"任务执行机器"属性, 改为通过任务注册和自动发现的方式, 动态获取远程执行器地址并执行。
AppName: 每个执行器机器集群的唯一标示, 任务注册以 "执行器" 为最小粒度进行注册; 每个任务通过其绑定的执行器可感知对应的执行器机器列表;
AppName: 每个执行器机器集群的唯一标示, 任务注册以 "执行器" 为最小粒度进行注册; 每个任务通过其绑定的执行器可感知对应的执行器机器列表;
Beat: 任务注册心跳周期, 默认15s; 执行器以一倍Beat进行执行器注册, 调度中心以一倍Beat进行动态任务发现; 注册信息的失效时间被两倍Beat;
注册表: 见"XXL_JOB_QRTZ_TRIGGER_REGISTRY"表, "执行器" 在进行任务注册时将会周期性维护一条注册记录,即机器地址和AppName的绑定关系; "调度中心" 从而可以动态感知每个AppName在线的机器列表;
注册表: 见"XXL_JOB_QRTZ_TRIGGER_REGISTRY"表, "执行器" 在进行任务注册时将会周期性维护一条注册记录,即机器地址和AppName的绑定关系; "调度中心" 从而可以动态感知每个AppName在线的机器列表;
执行器注册: 任务注册Beat周期默认30s; 执行器以一倍Beat进行执行器注册, 调度中心以一倍Beat进行动态任务发现; 注册信息的失效时间被三倍Beat;
执行器注册摘除:执行器销毁时,将会主动上报调度中心并摘除对应的执行器机器信息,提高心跳注册的实时性;
为保证系统"轻量级"并且降低学习部署成本,没有采用Zookeeper作为注册中心,采用DB方式进行任务注册发现;
为保证系统"轻量级"并且降低学习部署成本,没有采用Zookeeper作为注册中心,采用DB方式进行任务注册发现;
...
@@ -986,8 +988,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
...
@@ -986,8 +988,8 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段
-
3、新增JFinal类型执行器sample示例项目;
-
3、新增JFinal类型执行器sample示例项目;
-
4、执行器手动设置IP时将会绑定Host;
-
4、执行器手动设置IP时将会绑定Host;
-
5、项目主页搭建,提供中英文文档;
-
5、项目主页搭建,提供中英文文档;
-
6、执行器回调线程优化,线程销毁前批量回调队列中
所有数据
;
-
6、执行器回调线程优化,线程销毁前批量回调队列中
数据,防止任务结果丢失
;
-
7、执行器注册线程优化,线程销毁时主动摘除注册机器;
-
7、执行器注册线程优化,线程销毁时主动摘除注册机器
信息,提高执行器注册的实时性
;
### TODO LIST
### TODO LIST
-
1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
-
1、任务权限管理:执行器为粒度分配权限,核心操作校验权限;
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/AdminBizImpl.java
浏览文件 @
837ab404
...
@@ -73,7 +73,7 @@ public class AdminBizImpl implements AdminBiz {
...
@@ -73,7 +73,7 @@ public class AdminBizImpl implements AdminBiz {
childTriggerMsg
+=
MessageFormat
.
format
(
"<br> {0}/{1} 触发子任务成功, 子任务Key: {2}, status: {3}, 子任务描述: {4}"
,
childTriggerMsg
+=
MessageFormat
.
format
(
"<br> {0}/{1} 触发子任务成功, 子任务Key: {2}, status: {3}, 子任务描述: {4}"
,
(
i
+
1
),
childJobKeys
.
length
,
childJobKeys
[
i
],
ret
,
childJobInfo
.
getJobDesc
());
(
i
+
1
),
childJobKeys
.
length
,
childJobKeys
[
i
],
ret
,
childJobInfo
.
getJobDesc
());
}
catch
(
SchedulerException
e
)
{
}
catch
(
SchedulerException
e
)
{
logger
.
error
(
""
,
e
);
logger
.
error
(
e
.
getMessage
()
,
e
);
}
}
}
else
{
}
else
{
childTriggerMsg
+=
MessageFormat
.
format
(
"<br> {0}/{1} 触发子任务失败, 子任务xxlJobInfo不存在, 子任务Key: {2}"
,
childTriggerMsg
+=
MessageFormat
.
format
(
"<br> {0}/{1} 触发子任务失败, 子任务xxlJobInfo不存在, 子任务Key: {2}"
,
...
...
xxl-job-admin/src/main/java/com/xxl/job/admin/service/impl/XxlJobServiceImpl.java
浏览文件 @
837ab404
...
@@ -132,12 +132,12 @@ public class XxlJobServiceImpl implements XxlJobService {
...
@@ -132,12 +132,12 @@ public class XxlJobServiceImpl implements XxlJobService {
//XxlJobDynamicScheduler.pauseJob(qz_name, qz_group);
//XxlJobDynamicScheduler.pauseJob(qz_name, qz_group);
return
ReturnT
.
SUCCESS
;
return
ReturnT
.
SUCCESS
;
}
catch
(
SchedulerException
e
)
{
}
catch
(
SchedulerException
e
)
{
logger
.
error
(
""
,
e
);
logger
.
error
(
e
.
getMessage
()
,
e
);
try
{
try
{
xxlJobInfoDao
.
delete
(
jobInfo
.
getId
());
xxlJobInfoDao
.
delete
(
jobInfo
.
getId
());
XxlJobDynamicScheduler
.
removeJob
(
qz_name
,
qz_group
);
XxlJobDynamicScheduler
.
removeJob
(
qz_name
,
qz_group
);
}
catch
(
SchedulerException
e1
)
{
}
catch
(
SchedulerException
e1
)
{
logger
.
error
(
""
,
e1
);
logger
.
error
(
e
.
getMessage
()
,
e1
);
}
}
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"新增任务失败:"
+
e
.
getMessage
());
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
"新增任务失败:"
+
e
.
getMessage
());
}
}
...
@@ -207,7 +207,7 @@ public class XxlJobServiceImpl implements XxlJobService {
...
@@ -207,7 +207,7 @@ public class XxlJobServiceImpl implements XxlJobService {
boolean
ret
=
XxlJobDynamicScheduler
.
rescheduleJob
(
qz_group
,
qz_name
,
exists_jobInfo
.
getJobCron
());
boolean
ret
=
XxlJobDynamicScheduler
.
rescheduleJob
(
qz_group
,
qz_name
,
exists_jobInfo
.
getJobCron
());
return
ret
?
ReturnT
.
SUCCESS
:
ReturnT
.
FAIL
;
return
ret
?
ReturnT
.
SUCCESS
:
ReturnT
.
FAIL
;
}
catch
(
SchedulerException
e
)
{
}
catch
(
SchedulerException
e
)
{
logger
.
error
(
""
,
e
);
logger
.
error
(
e
.
getMessage
()
,
e
);
}
}
return
ReturnT
.
FAIL
;
return
ReturnT
.
FAIL
;
...
...
xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java
浏览文件 @
837ab404
...
@@ -115,7 +115,7 @@ public class ExecutorBizImpl implements ExecutorBiz {
...
@@ -115,7 +115,7 @@ public class ExecutorBizImpl implements ExecutorBiz {
IJobHandler
originJobHandler
=
GlueFactory
.
getInstance
().
loadNewInstance
(
triggerParam
.
getGlueSource
());
IJobHandler
originJobHandler
=
GlueFactory
.
getInstance
().
loadNewInstance
(
triggerParam
.
getGlueSource
());
jobHandler
=
new
GlueJobHandler
(
originJobHandler
,
triggerParam
.
getGlueUpdatetime
());
jobHandler
=
new
GlueJobHandler
(
originJobHandler
,
triggerParam
.
getGlueUpdatetime
());
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
""
,
e
);
logger
.
error
(
e
.
getMessage
()
,
e
);
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
e
.
getMessage
());
return
new
ReturnT
<
String
>(
ReturnT
.
FAIL_CODE
,
e
.
getMessage
());
}
}
}
}
...
...
xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServer.java
浏览文件 @
837ab404
...
@@ -55,9 +55,9 @@ public class JettyServer {
...
@@ -55,9 +55,9 @@ public class JettyServer {
server
.
join
();
// block until thread stopped
server
.
join
();
// block until thread stopped
logger
.
info
(
">>>>>>>>>>> xxl-rpc server join success, netcon={}, port={}"
,
JettyServer
.
class
.
getName
(),
port
);
logger
.
info
(
">>>>>>>>>>> xxl-rpc server join success, netcon={}, port={}"
,
JettyServer
.
class
.
getName
(),
port
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
""
,
e
);
logger
.
error
(
e
.
getMessage
()
,
e
);
}
finally
{
}
finally
{
destroy
();
//
destroy();
}
}
}
}
});
});
...
@@ -67,25 +67,25 @@ public class JettyServer {
...
@@ -67,25 +67,25 @@ public class JettyServer {
public
void
destroy
()
{
public
void
destroy
()
{
// destroy Registry-Server
ExecutorRegistryThread
.
getInstance
().
toStop
();
// destroy Callback-Server
TriggerCallbackThread
.
getInstance
().
toStop
();
// destroy server
// destroy server
if
(
server
!=
null
)
{
if
(
server
!=
null
)
{
try
{
try
{
server
.
stop
();
server
.
stop
();
server
.
destroy
();
server
.
destroy
();
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
""
,
e
);
logger
.
error
(
e
.
getMessage
()
,
e
);
}
}
}
}
if
(
thread
.
isAlive
())
{
if
(
thread
.
isAlive
())
{
thread
.
interrupt
();
thread
.
interrupt
();
}
}
// destroy Registry-Server
ExecutorRegistryThread
.
getInstance
().
toStop
();
// destroy Callback-Server
TriggerCallbackThread
.
getInstance
().
toStop
();
logger
.
info
(
">>>>>>>>>>> xxl-rpc server destroy success, netcon={}"
,
JettyServer
.
class
.
getName
());
logger
.
info
(
">>>>>>>>>>> xxl-rpc server destroy success, netcon={}"
,
JettyServer
.
class
.
getName
());
}
}
...
...
xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java
浏览文件 @
837ab404
...
@@ -99,6 +99,7 @@ public class ExecutorRegistryThread extends Thread {
...
@@ -99,6 +99,7 @@ public class ExecutorRegistryThread extends Thread {
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
logger
.
warn
(
">>>>>>>>>>>> xxl-job, executor registry thread destory."
);
}
}
});
});
...
@@ -108,6 +109,13 @@ public class ExecutorRegistryThread extends Thread {
...
@@ -108,6 +109,13 @@ public class ExecutorRegistryThread extends Thread {
public
void
toStop
()
{
public
void
toStop
()
{
toStop
=
true
;
toStop
=
true
;
// interrupt and wait
registryThread
.
interrupt
();
try
{
registryThread
.
join
();
}
catch
(
InterruptedException
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
}
}
}
xxl-job-core/src/main/java/com/xxl/job/core/thread/TriggerCallbackThread.java
浏览文件 @
837ab404
...
@@ -80,6 +80,7 @@ public class TriggerCallbackThread {
...
@@ -80,6 +80,7 @@ public class TriggerCallbackThread {
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
logger
.
warn
(
">>>>>>>>>>>> xxl-job, executor callback thread destory."
);
}
}
});
});
...
@@ -88,6 +89,13 @@ public class TriggerCallbackThread {
...
@@ -88,6 +89,13 @@ public class TriggerCallbackThread {
}
}
public
void
toStop
(){
public
void
toStop
(){
toStop
=
true
;
toStop
=
true
;
// interrupt and wait
triggerCallbackThread
.
interrupt
();
try
{
triggerCallbackThread
.
join
();
}
catch
(
InterruptedException
e
)
{
logger
.
error
(
e
.
getMessage
(),
e
);
}
}
}
/**
/**
...
...
xxl-job-core/src/main/java/com/xxl/job/core/util/HttpClientUtil.java
浏览文件 @
837ab404
...
@@ -62,7 +62,7 @@ public class HttpClientUtil {
...
@@ -62,7 +62,7 @@ public class HttpClientUtil {
EntityUtils
.
consume
(
entity
);
EntityUtils
.
consume
(
entity
);
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
logger
.
error
(
""
,
e
);
logger
.
error
(
e
.
getMessage
()
,
e
);
throw
e
;
throw
e
;
}
finally
{
}
finally
{
httpPost
.
releaseConnection
();
httpPost
.
releaseConnection
();
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论