Elastic Job进阶--作业是如何被立即触发的

434 阅读1分钟

在运维平台中,通常作业执行失败或者想要再次执行作业的时候,会去点击 ‘触发’按钮 之后就可以看到作业被成功重新触发执行,那么触发按钮是怎么做到让作业立即出发执行的呢,接下来带你一步步探索!

点击触发按钮时,发起的http请求如图所示 由于我是通过源码启动的运维平台,所以可以很方便的进行debug调试,通过源码发现,进入的是JobOperationRestfulApi##triggerJob()方法 接着进入triggerJob方法,可以发现regCenter.getChildrenKeys(jobNodePath.getInstancesNodePath())是取出当前作业下所有的实例节点,当前只有一台,就是我的本机 进入regCenter.persist方法,发现就是设置内容TRIGGER到 zookeeper 中节点/demoSimpleSpringJob/instances/192.168.99.1@-@18552

为了演示效果,我除了通过运维平台点击触发立即执行任务,还通过手动修改注册中心作业信息立即执行, 在 zookeeper 客户端内执行 set /elastic-job-demo-quick-demo/demoSimpleSpringJob/instances/192.168.99.1@-@18552 TRIGGER 效果如下,当命令输入完成,应用控制台马上输出了作业工作时的日志。

Elastic-job是如何立即执行的

在Elastic-job-core源码中, 有这么一个类TriggerListenerManager 内部的start()方法会调用作业注册中心的监听器JobTriggerStatusJobListener去检查注册中心的数据节点,判断是否有TRIGGER的数据操作

最后triggerJob()方法立刻启动相关作业