# 系统简介
Attemper 是一个分布式任务调度应用,基于 Java 语言实现(前端是 Vue)。 本项目基于 quartz 实现分布式任务调度(定时、API);引入 camunda 作为任务执行框架,支持工作流式任务编排、并发批量调度和参数传递。
# 功能特性
- 调度
- 基于Redis分布式锁或数据库锁(quartz 原生)实现分布式任务调度
- 使用 disruptor 来加速任务分发和执行
- 支持延迟调度(由业务系统运行时调用 API)
- 可手工触发任务
- 可重试(支持从指定的错误节点开始)
- 可终止任务执行
- 扩展季度和半年作为 quartz 的周期单位(比如可以每季度(半年)第一个交易日执行)
- 任务
- 启用/禁用
- 任务复制/导入/导出
- 任务流式编排(串行/并发/父子任务)
- 支持 Http/Shell/Python/Groovy 等
- Http 任务支持同步和异步
- 脚本任务支持在线编写和本地文件路径
- 任务支持超时设置
- 任务可设置是否能够并行的开关
- 版本管理(版本迭代、版本切换)
- 支持手工触发任务(调试、补采)
- 触发器
- Cron 表达式触发器(quartz)
- 每日周期触发器(quartz):支持形如每个交易日 09:15 到 15:00 每 90s 执行一次
- 日历周期触发器(quartz):支持形如每月第 1 天开始,每隔 2 周执行一次
- 日程偏移触发器(扩展):支持形如每周第一个交易日 07:00 执行一次
- 参数
- 支持 String,Boolean,Inetger,Double,Long,Date,Time,DateTime,List,Map,Sql,Gist,TradeDate 等类型
- 任务及其节点可绑定参数
- 参数可在节点或父子任务间传递
- 日历
- 支持证券交易日、自然日、工作日、法定节假日等
- 可自定义并导入日历
- 扩展季度和半年作为 quartz 的周期单位(比如可以每季度(半年)第一个交易日执行)
- 数据源
- 支持 Mysql、Oracle、Sqlserver、Posgresql 数据库的数据源管理
- 支持测试数据源的连接
- 监控
- 支持实时、历史和全量监控
- 支持终止执行中的任务实例
- 支持重试失败的任务实例
- 支持在线查看日志
- 告警
- 告警方式支持邮件(可自己扩展)
- 告警条件:执行报错
- 统计与分析
- 支持任务执行实例的统计
- 多租户
- 不同业务系统以租户分割权限(数据、菜单)
- 多服务
- 一个租户下,多个分布式服务均可使用该租户
- 支持以服务发现、IP 端口和域名的方式对接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# 服务模块
- 本项目自身模块结构
├── attemper # 根项目,管理根pom
│ ├── attempepr-admin # 前端-调度中心
│ ├── attempepr-common # POJO、工具类和异常信息定义
│ ├── attempepr-config # 数据源、全局异常等配置
│ ├── attempepr-sys # 系统管理模块(租户、角色等)
│ ├── attempepr-core # 封装核心功能模块(调度、监控、告警等)
│ ├── attempepr-security # 登录、token等处理
│ ├── attempepr-invoker # 封装调用执行器的功能
│ ├── attempepr-web # 后端-调度中心
│ ├── attempepr-scheduler # 调度器
│ ├── attempepr-executor # 执行器
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 调度中心
调度中心由前端和后端组成
- 前端
attemper-admin
在线管理调度任务、触发器的配置和监控的查看
attemper-admin
├── build # 构建相关
├── nginx # 打包docker镜像时覆盖的nginx配置
├── public # 静态资源
│ │── favicon.ico # favicon图标
│ └── index.html # html模板
├── src # 源代码
│ ├── api # 所有请求
│ ├── assets # 主题 字体等静态资源
│ ├── components # 全局公用组件
│ ├── constant # 静态全局变量(数组)
│ ├── directive # 全局指令
│ ├── filters # 全局 filter
│ ├── icons # 项目所有 svg icons
│ ├── lang # 国际化 language
│ ├── layout # 全局 layout
│ ├── router # 路由
│ ├── store # 全局 store管理
│ ├── styles # 全局样式
│ ├── utils # 全局公用方法
│ ├── vendor # 公用vendor
│ ├── views # views 所有页面
│ ├── App.vue # 入口页面
│ ├── main.js # 入口文件 加载组件 初始化等
│ ├── permission.js # 权限管理
│ └── settings.js # 全局配置
├── tests # 测试
├── .env.xxx # 环境变量配置
├── .eslintrc.js # eslint 配置项
├── babel.config.js # babel-loader 配置
├── .travis.yml # 自动化CI配置
├── vue.config.js # vue-cli 配置
├── postcss.config.js # postcss 配置
└── package.json # package.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
- 后端
attemper-web
后端服务除了管理功能外,还兼容调度器的所有功能,若此服务启用调度功能,可无需部署调度器
内部模块和外部依赖:
├── attemper-web
│ ├── camunda # 任务执行框架(管理任务)
│ ├── eureka # 注册中心客户端依赖
│ ├── attemper-invoker
│ ├──── quartz # 调度框架
│ ├──── attemper-security
│ ├────── shiro # 安全框架
│ ├────── attemper-core
│ ├──────── mail # 邮件
│ ├──────── commons-exec # java调用命令行的工具包
│ ├──────── oshi # java读取主机信息、jvm指标的工具包
│ ├──────── attemper-sys
│ ├────────── jwt # json web token工具包
│ ├────────── attemper-config
│ ├──────────── spring-boot # spring-boot-starter-web/aop/jdbc...
│ ├──────────── mysql/oracle/sql server/postgresql # 4个数据源的驱动包
│ ├──────────── swaggger # 在线API文档管理
│ ├──────────── attemper-common
│ └────────────── lombok # 类代码优化工具(get/set等)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 执行器
执行器(attemper-executor
)是任务执行的载体,处理任务日志的收集、错误日志的告警等
内部模块和外部依赖:
├── attemper-executor
│ ├── camunda # 任务执行框架(执行任务)
│ ├── eureka # 注册中心客户端依赖
│ ├── disruptor # 无锁并行计算框架,用作任务分发
│ ├── groovy # java调用groovy的工具包
│ ├── jsr223-shell # java调用shell(支持python等)脚本的工具包
│ ├── attemper-security
│ ├──── shiro # 安全框架
│ ├──── attemper-core
│ ├────── mail # 邮件
│ ├────── commons-exec # java调用命令行的工具包
│ ├────── oshi # java读取主机信息、jvm指标的工具包
│ ├────── attemper-sys
│ ├──────── jwt # json web token工具包
│ ├──────── attemper-config
│ ├────────── spring-boot # spring-boot-starter-web/aop/jdbc...
│ ├────────── mysql/oracle/sql server/postgresql # 4个数据源的驱动包
│ ├────────── swaggger # 在线API文档管理
│ ├────────── attemper-common
│ └──────────── lombok # 类代码优化工具(get/set等)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 调度器
调度器(attemper-scheduler
)是简化调度中心后端的服务,它只管对定时任务的调用,可以独立部署并低频启停
内部模块和外部依赖:
├── attemper-scheduler
│ ├── eureka # 注册中心客户端
│ ├── attemper-invoker
│ ├──── quartz # 调度框架
│ ├──── attemper-security
│ ├────── shiro # 安全框架
│ ├────── attemper-core
│ ├──────── mail # 邮件
│ ├──────── commons-exec # java调用命令行的工具包
│ ├──────── oshi # java读取主机信息、jvm指标的工具包
│ ├──────── attemper-sys
│ ├────────── jwt # json web token工具包
│ ├────────── attemper-config
│ ├──────────── spring-boot # spring-boot-starter-web/aop/jdbc...
│ ├──────────── mysql/oracle/sql server/postgresql # 4个数据源的驱动包
│ ├──────────── swaggger # 在线API文档管理
│ ├──────────── attemper-common
│ └────────────── lombok # 类代码优化工具(get/set等)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18