调度中心自动发现执行器服务
xxl没有采用zk等协作服务器,是通过数据库来实现的服务自动注册。
执行器端
执行器端应用启动时,首先会执行com.xxl.job.core.executor.XxlJobExecutor.start方法,这是在applicationcontext-xxl-job.xml中配置好的。
start方法中会启动一个守护线程,守护线程中通过jetty服务调用调度中心固定的controller(/api/registry)。
调度中心
调度中心提供有很多controller,除了提供给前台界面UI的controller之外,还有个JobApiController,专门接收执行器端发来的请求,其中:
/api/registry
接收执行器端注册请求,通过执行器appName,和执行器地址更新数据库中的时间,即数据库中该执行器地址的时间每隔30秒更新一次。
调度中心启动时同时启动两个守护线程:
JobRegistryMonitorHelper
每隔30秒移除数据库中过期的执行器,通过比较更新时间小于当前时间-90s。
这样就可以及时将宕掉的执行器端某个服务器排除在外了。