执行器启动,初始化路口在XxlJobSpringExecutor类的afterSingletonsInstantiated方法中,源码如下
@Override
public void afterSingletonsInstantiated() {
// 从Spring上下文中获取所有类,遍历类,获取所有添加了XxlJob注解的方法
// 然后调用registJobHandler将这些方法注册到缓存中
initJobHandlerMethodRepository(applicationContext);
// Glue相关的东西
GlueFactory.refreshInstance(1);
try {
//调用父类jobHandlerRepository的start方法
super.start();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void start() throws Exception {
// 初始化日志路径和glue的日志路径
XxlJobFileAppender.initLogPath(logPath);
// 将调度中心的ip、端口、accessToken封装成AdminBizClient对象
// 有几个ip,就封装几个AdminBizClient对象,然后把这些对象都放到adminBizList中
initAdminBizList(adminAddresses, accessToken);
// 初始化日志线程,遍历日志根目录下的日期文件夹,如果文件夹日期超过30天,就删除
// 遍历完后TimeUnit.DAYS.sleep(1)休息一天,即每天检查一次
JobLogFileCleanThread.getInstance().start(logRetentionDays);
// 初始化回调线程,从队列callBackQueue中获取回调对象HandleCallbackParam
// 注意:callBackQueue是LinkedBlockingQueue,获取对象的方法是take,所以没有对象时会一直阻塞
// 当获取到回调对象后,调用doCallback方法,具体源码下面分析
TriggerCallbackThread.getInstance().start();
// 获取当前的ip和配置的执行器注册端口,然后以此端口创建TCP服务端
// 创建完服务端后,往所有调度中心发送注册服务的http请求(注册接口是api/registry)
// 参数内容包括:执行器名称、当前TCP服务端的ip和端口
// 当系统关闭时,还会往所有调度中心发送移除注册的http请求(移除接口是api/registryRemove)
// 参数内容同上
initEmbedServer(address, ip, port, appname, accessToken);
}
doCallback源码如下
private void doCallback(List<HandleCallbackParam> callbackParamList){
boolean callbackRet = false;
// 遍历之前创建的AdminBiz对象集合,也就是调度中心地址
for (AdminBiz adminBiz: XxlJobExecutor.getAdminBizList()) {
try {
// 通过http请求,发送回调命令,并获取返回值
ReturnT<String> callbackResult = adminBiz.callback(callbackParamList);
if (callbackResult!=null && ReturnT.SUCCESS_CODE == callbackResult.getCode()) {
// 回调成功就标记一下
callbackLog(callbackParamList, "<br>----------- xxl-job job callback finish.");
callbackRet = true;
break;
} else {
callbackLog(callbackParamList, "<br>----------- xxl-job job callback fail, callbackResult:" + callbackResult);
}
} catch (Exception e) {
callbackLog(callbackParamList, "<br>----------- xxl-job job callback error, errorMsg:" + e.getMessage());
}
}
if (!callbackRet) {
// 回调失败就记录日志
appendFailCallbackFile(callbackParamList);
}
}
调度中心在接收到registry请求时,会先更新xxl_job_registry表中的记录,如果更新条数为0,就insert记录。registryRemove则是从xxl_job_registry表中删除记录
本文详细解析了XXL-Job执行器的启动流程,包括初始化路口、注册方法、日志路径设置、调度中心注册、回调线程及TCP服务端创建等关键步骤。
1303

被折叠的 条评论
为什么被折叠?



