Azkaban的定时调度任务分析34:定时执行下文
Azkaban的定时调度任务分析34:定时执行下文
强子哥哥 发表于2年前
Azkaban的定时调度任务分析34:定时执行下文
  • 发表于 2年前
  • 阅读 203
  • 收藏 0
  • 点赞 1
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

下面说线程azkaban.trigger.TriggerManager.TriggerScannerThread是如何运作的

1)初始化

stop in azkaban.trigger.TriggerManager$TriggerScannerThread.xxx

run

初始化的上下文是:

java.lang.Exception

at azkaban.trigger.TriggerManager$TriggerScannerThread.xxx(TriggerManager.java:187)

at azkaban.trigger.TriggerManager$TriggerScannerThread.<init>(Trigg

Step completed: erManager.java:191)

at azkaban.trigger.TriggerManager.<init"thread=main", azkaban.trigger.TriggerManager$TriggerScannerThread.xxx(), line=188 bci=10

>(Tri188    }


ggerManager.java:67)

at azkaban.wemain[1] bapp.AzkabanWebServer.loadTriggerManager(AzkabanWebServer.java:275)

at azkaban.webapp.AzkabanWebServer.<init>(AzkabanWebServer.java:199)

at azkaban.webapp.AzkabanWebServer.main(AzkabanWebServer.java:723)

=======================================================================================

2)线程的具体运行

stop in azkaban.trigger.TriggerManager$TriggerScannerThread.run


stop in azkaban.trigger.TriggerManager$TriggerScannerThread.checkAllTriggers


stop in azkaban.trigger.TriggerManager$TriggerScannerThread.onTriggerTrigger


---另外要注意:

long scannerInterval = props.getLong("trigger.scan.interval", DEFAULT_SCANNER_INTERVAL_MS);

runnerThread = new TriggerScannerThread(scannerInterval);

设置了查看周期,默认值竟然是

public static final long DEFAULT_SCANNER_INTERVAL_MS = 60000;

竟然有1分钟。。。

果然修改此值


然后继续研究,发现

private void onTriggerTrigger(Trigger t) throws TriggerManagerException {

 

List<TriggerAction> actions = t.getTriggerActions();

for (TriggerAction action : actions) {

try {

logger.info("Doing trigger actions");

System.out.println("action*************************************:" + action);

action.doAction();//重点来了!!!

} catch (Exception e) {

logger.error("Failed to do action " + action.getDescription(), e);

} catch (Throwable th) {

logger.error("Failed to do action " + action.getDescription(), th);

}

}

if (t.isResetOnTrigger()) {

t.resetTriggerConditions();

t.resetExpireCondition();

} else {

t.setStatus(TriggerStatus.EXPIRED);

}

try {

triggerLoader.updateTrigger(t);

} catch (TriggerLoaderException e) {

throw new TriggerManagerException(e);

}

}

如果屏蔽这行,exec就不会执行任务!

action的代码是azkaban.trigger.builtin.ExecuteFlowAction

============================================================

通过这里加代码观察

然后观察打印出来的日志:

正好验证了我的想法!因为我的任务也是6秒为周期!

==================================================================================

stop in azkaban.trigger.builtin.ExecuteFlowAction.doAction

run

==================================================================================

总结:定时把一个任务放入到web的一个queue中,而一次性任务则是放置1次!

标签: azkaban
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
强子哥哥
粉丝 847
博文 551
码字总数 641590
作品 8
×
强子哥哥
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: