xxl-job 2.3.0-SNAPSHOT的目录结构(Admin)

com.xxl.job.admin

  • 启动类的包,没什么内容

XxlJobAdminApplication
boot启动项,没什么内容

com.xxl.job.admin.controller

  • 页面和接口的Controller

IndexController
登录登出逻辑和一些首页的基础页面
@InitBinder 可以学习下

JobApiController
用于提供给客户端接入的Api接口,包含callback,registry,registryRemove

JobCodeController
GLUE用到的源码的编辑页面功能
需要注意只保留同一任务的30次修改记录

JobGroupController
执行器的增删改查功能

JobInfoController
任务的增删改查功能
只显示自己账号关联的执行器的任务,用作权限管理

JobLogController
任务日志相关的简单功能
有一个logkill的终止任务可以了解一下具体逻辑

UserController
用户的增删改查功能

com.xxl.job.admin.controller.annotation

  • 自定义注解

CookieInterceptor
用于前端modelAndView里面放入cookie信息和国际化信息

PermissionInterceptor
权限拦截器,是否需要登录和是否需要管理员操作

WebMvcConfig
注册需要用到的拦截器

com.xxl.job.admin.controller.interceptor

  • 拦截器

PermissionLimit
权限相关很简单

com.xxl.job.admin.controller.resolver

  • 异常处理

WebExceptionResolver
统一的最外层异常拦截,json的返回标准异常数据,否则跳转到报错页面

com.xxl.job.admin.core.alarm

  • 告警处理

JobAlarm
告警接口,实现该接口的服务会在告警时调用

JobAlarmer
封装的告警方法,把接口的所有实现全部调用一遍

com.xxl.job.admin.core.alarm.impl

  • 告警实现

EmailJobAlarm
告警的邮件发送

com.xxl.job.admin.core.complete

  • 任务完成后的操作

XxlJobCompleter
任务完成以后,更新日志信息,同时成功以后触发子任务

com.xxl.job.admin.core.conf

  • 配置信息

XxlJobAdminConfig
配置信息,没什么功能

com.xxl.job.admin.core.cron

  • CRON表达式的工具类

CronExpression
CRON表达式的工具类,看注释是从quartz里面copy过来的

com.xxl.job.admin.core.exception

  • 异常类

XxlJobException
自定义异常类,没什么逻辑

com.xxl.job.admin.core.model

  • 对应的数据对象,都是POJO

XxlJobGroup
XxlJobInfo
XxlJobLog
XxlJobLogGlue
XxlJobLogReport
XxlJobRegistry
XxlJobUser

com.xxl.job.admin.core.old

  • 废弃代码的存放位置,已经废弃了,所以具体类不再说明

com.xxl.job.admin.core.route

  • 路由相关包

ExecutorRouter
路由选择的接口

ExecutorRouteStrategyEnum
路由的字典和实现类映射关系

com.xxl.job.admin.core.route.strategy

  • 路由选择的实现方式(这里没有分片广播,分片广播不用选路由)

ExecutorRouteBusyover
忙碌转移路由实现
根据任务ID,去每一个地址获取该任务是否在执行中,如果执行,则换另一个,如果都在执行则会报错,慎用

ExecutorRouteConsistentHash
一致性HASH路由实现
通过hash值去完成映射关系
有几个注意事项

  1. 了解TreeMap
  2. 相同地址的不同顺序hash不同
  3. 每个任务的hash是固定的(所以对于同一个任务,有可能是盯着一台机器的跑的)

ExecutorRouteFailover
故障转移路由实现
多个地址,主动获取服务器存活状态,找到第一个,默认接口都是存活的,也可以修改实现类,针对某些服务拒绝,不过没啥必要

ExecutorRouteFirst
第一个路由实现
选地址列表的第一个

ExecutorRouteLast
最后一个路由实现
选地址列表的最后一个

ExecutorRouteLFU
最不经常使用路由实现
单机内存数据
有几个注意事项

  1. 1天会清一次内存数据
  2. 地址不存在了会清零,所以下线以后会归零,起步是随机数

ExecutorRouteLRU
最近最久未使用路由实现
单机内存数据
有几个注意事项

  1. 1天会清一次内存数据
  2. 基于LinkedHashMap的key的迭代器
  3. 有部分注释还没特别理解,需要进一步研究下

ExecutorRouteRandom
随机路由实现
地址列表里面随机选一个

ExecutorRouteRound
轮询路由实现
根据单机内存同一个任务的执行次数,然后根据地址表轮询
有几个注意事项

  1. 一个地址顺序调整
  2. 一个是单机内存(集群会有偏差)
  3. 100万次会有一次类似归零操作
  4. 1天会清一次内存数据

com.xxl.job.admin.core.scheduler

  • 调度任务的主方法

MisfireStrategyEnum
时间延误以后的处理方案(忽略,立即执行一次) 2.3.0的新功能

ScheduleTypeEnum
调度的执行方式(CRON,固定速度) 2.3.0的新功能

XxlJobScheduler
调度任务的主方法,除了国际化初始化以外,还把所有的com.xxl.job.admin.core.thread里面的线程池都启动了
还有一个根据地址获取执行器实现类的方法

com.xxl.job.admin.core.thread

  • 所有调度任务用到的线程

JobCompleteHelper
一组callback线程

  1. 调用XxlJobCompleter的callback行为(无论成功失败)
    一个守护线程
  2. 超时的任务且执行器已经不再了,就标注失败了
  3. 这里有个问题,超时了,但是执行器在1分半内重启完成的怎么处理(TODO)
  4. 还有一个问题,疑似是bug,任务的超时时间的设定似乎没有用到过(客户端里面用到了,超时算失败)
  5. 守护线程需要了解一下,只要所有线程全部执行完毕以后,守护线程会被回收而不是等待线程执行完毕以后回收

JobFailMonitorHelper
失败的守护进程

  1. 查到失败的数据,需要重试的进行重试,该告警的进行告警

JobLogReportHelper
日志和报表的守护进程

  1. 生成当日的报告,同时把超期的日志进行删除
  2. 刷3天的报告,今天,昨天,前天

JobRegistryHelper
注册和remove线程用来更新registry里面的数据
守护进程,用刷新执行器里面的地址信息
在注册和remove的时候有想过要实时刷新执行器信息,不过应该是担心更新太频繁影响性能,所以最终没有这么做

JobScheduleHelper
schedule线程:把需要执行的任务检索出来扔到ring数据中,因为schedule是5秒一次,时间不够精确
ring线程:1秒一次,将该执行的任务进行执行
有几个问题

  1. FastMax+SlowMax的算法值得商榷
  2. 基于数据库的锁,这里是xxl和quartz里面最大的问题,数据库锁量很难大,即便是集群也解决不掉
  3. scheduleJobQuery似乎应该按照trigger_next_time的顺序作为第一排列
  4. 超过5秒的任务,不是立即执行的就直接忽略了,进入下一次(2.2的时候因为没有立即执行选项,所以超过就直接忽略了)
  5. 超时但是5秒内的,立即执行,然后算下一次时间,如果还在5秒内,扔到ring队列里面
  6. ring队列是最终触发任务的,因为1秒一次所以时间准确

JobTriggerPoolHelper
fastTriggerPool 和 slowTriggerPool 两个池子,分别调用触发逻辑XxlJobTrigger
快队列和慢队列的计算方式感觉不是很好

com.xxl.job.admin.core.trigger

  • 触发逻辑

TriggerTypeEnum
触发原因的字典表

XxlJobTrigger
触发的具体逻辑,这里有分片逻辑
其他就是记录日志,请求参数,然后发送请求

com.xxl.job.admin.core.util

  • 工具包(都是一些基础工具类,LocalCacheUtil可以参考下)

com.xxl.job.admin.dao

  • DB的dao没什么具体逻辑

com.xxl.job.admin.service

  • 接口定义

LoginService
登录逻辑,其中token有点问题

XxlJobService
接口定义

com.xxl.job.admin.service.impl

  • 实现类

AdminBizImpl
对应JobApiController的里面的东西,没啥内容

XxlJobServiceImpl
有一个5秒预读的错过

你可能感兴趣的:(xxl-job 2.3.0-SNAPSHOT的目录结构(Admin))