开放代码社区 › disjob
disjob
基础设施与运维Java一款分布式的任务调度与分布式计算框架 简体中文 English 一款分布式的任务调度与分布式计算框架,除了具备常规的任务调度功能外,还提供暂停/取消运行中的任务、恢复执行已暂停的任务、任务分片、失败重试、广播任务、任务依赖、工作流任务(DAG)、管理器与执行器分离部署、Web管理后台等能力。 轻量级,简单易用,特别适合长任务的执行。功能强大,稳定可靠,历经生产检验。
仓库地址
https://gitee.com/dromara/disjob.gitREADME
<p align="center">
<img src="https://web-code-img.oss-cn-shanghai.aliyuncs.com/readme/1056a5dfb9f7bbfb89c866bf.png" width="160" alt="Logo" />
</p>
<p align="center">
<strong>一款分布式的任务调度与分布式计算框架</strong>
</p>
<p align="center">
<a href="https://www.apache.org/licenses/LICENSE-2.0.html"><img src="https://img.shields.io/badge/license-Apache--2.0-green.svg?logo=apache" alt="License"></a>
<a href="https://www.oracle.com/java/technologies/downloads/#java8"><img src="https://img.shields.io/badge/JDK-8+-green.svg?logo=oracle&logoColor=crimson" alt="JDK8+"></a>
<a href="https://central.sonatype.com/namespace/cn.ponfee"><img src="https://img.shields.io/badge/maven--central-2.2.5-orange.svg?style=plastic&logo=apachemaven" alt="Maven Central"></a>
<a href="https://github.com/dromara/disjob/actions"><img src="https://github.com/dromara/disjob/workflows/build/badge.svg" alt="Build status"></a>
<a href="http://ponfee.cn:8000/"><img src="https://img.shields.io/badge/online-Demo-blue.svg?logo=airplayvideo&logoColor=green" alt="Demo"></a>
</p>
<p align="center">
在线演示:<a href="http://ponfee.cn:8000/">http://ponfee.cn:8000/</a>
</p>
---
**`简体中文`** | [English](https://gitee.com/dromara/disjob/blob/2.2.x/README.en.md)
一款分布式的任务调度与分布式计算框架,除了具备常规的任务调度功能外,还提供暂停/取消运行中的任务、恢复执行已暂停的任务、任务分片、失败重试、广播任务、任务依赖、工作流任务(DAG)、管理器与执行器分离部署、Web管理后台等能力。
轻量级,简单易用,特别适合长任务的执行。功能强大,稳定可靠,历经生产检验。
## Architecture
- 整体流程

- 代码结构
```text
disjob # 主项目①pom.xml
├── disjob-admin # 管理后台项目②pom.xml(基于Ruoyi框架二次开发)
├── disjob-alert # 告警模块
│ ├── disjob-alert-api # 告警的抽象接口层
│ ├── disjob-alert-email # 邮件告警
│ ├── disjob-alert-im # 即时通讯告警(钉钉、企业微信、飞书等)
│ └── disjob-alert-sms # 短信告警
├── disjob-bom # Maven项目bom模块
├── disjob-common # 公共的工具类模块
├── disjob-core # 任务调度相关的核心类(如枚举类、接口定义、接口参数等)
├── disjob-id # 分布式ID生成模块
├── disjob-registry # Server(Supervisor & Worker)注册模块
│ ├── disjob-registry-api # Server注册中心的抽象接口层
│ ├── disjob-registry-consul # Server注册中心:Consul实现
│ ├── disjob-registry-database # Server注册中心:Database实现
│ ├── disjob-registry-etcd # Server注册中心:Etcd实现
│ ├── disjob-registry-nacos # Server注册中心:Nacos实现
│ ├── disjob-registry-redis # Server注册中心:Redis实现
│ └── disjob-registry-zookeeper # Server注册中心:Zookeeper实现
├── disjob-reports # 聚合各个模块的测试覆盖率报告
├── disjob-samples # Samples项目③pom.xml
│ ├── disjob-samples-conf # Samples使用到的配置文件
│ ├── disjob-samples-frameless-worker # Worker单独部署的范例(普通Java-main应用)
│ ├── disjob-samples-springboot-merged # Supervisor与Worker合并部署的范例(Spring-boot应用)
│ ├── disjob-samples-springboot-supervisor # Supervisor单独部署的范例(Spring-boot应用)
│ └── disjob-samples-springboot-worker # Worker单独部署的范例(Spring-boot应用)
├── disjob-supervisor # Supervisor代码
├── disjob-test # 用于辅助测试
└── disjob-worker # Worker代码
```
## Features
- 分为管理器(Supervisor)和执行器(Worker)两种角色,Supervisor与Worker可分离部署
- Supervisor与Worker通过注册中心相互发现,支持的注册中心有:Database、Redis、Consul、Nacos、Zookeeper、Etcd
- Supervisor负责生成任务,把任务派发给Worker执行
- 需要指定Job的分组(group),Job的任务只会派发给指定组的Worker执行
- 提供任务分片的能力,重写拆分方法[JobSplitter#split](https://gitee.com/dromara/disjob/blob/2.2.x/disjob-worker/src/main/java/cn/ponfee/disjob/worker/executor/JobSplitter.java)即可拆分为多个任务,实现分布式任务及并行执行
- 支持暂停和取消运行中的任务,已暂停的任务可恢复继续执行,执行失败的任务支持重试
- 支持任务保存(Savepoint)其执行状态,让手动或异常暂停的任务能从上一次的执行状态中恢复继续执行
- 任务在执行时若抛出[PauseTaskException](https://gitee.com/dromara/disjob/blob/2.2.x/disjob-worker/src/main/java/cn/ponfee/disjob/worker/exception/PauseTaskException.java),会暂停对应实例下的全部任务(包括分派到其它worker机器的任务)
- 支持广播任务,广播任务会派发给group下的所有worker执行
- 支持Job间的父子依赖,多个Job配置好依赖关系后便会按既定的依赖顺序依次执行
- 支持DAG工作流,可把`jobExecutor`配置为复杂的DAG表达式,如:A->B,C,(D->E)->F,G->H
- 支持执行中的Task在Worker(服务)发布完成后自动恢复继续执行(见`shutdown_strategy`配置)
- 提供Web管理后台,通过用户界面进行作业配置,任务监控等
## Comparison
| | **Quartz** | **Elastic-Job** | **Xxl-Job** | **Disjob** |
| -------------- | ---------- |-----------------|----------------------|----------------------------------------|
| **触发类型** | Cron | Cron | Cron、固定频率、父子依赖 | Cron、指定时间、固定频率、固定延时、父子依赖 |
| **任务编排** | 无 | 无 | 无 | DAG表达式 |
| **任务分片** | 无 | 静态分片 | 广播任务 | 广播任务、动态分片 |
| **停止与恢复** | 无 | 无 | 终止运行中的任务 | 暂停执行中的任务、恢复执行已暂停的任务 |
| **保存执行数据** | 无 | 无 | 无 | 有 |
| **失败重试** | 无 | 失效转移 | 有 | 有 |
| **后台管理** | 无 | 有 | 有 | 有 |
| **监控告警** | 无 | 邮件 | 邮件 | 邮件、钉钉、企业微信、飞书、短信等 |
## [Download From Maven Central](https://central.sonatype.com/namespace/cn.ponfee)
```xml
<dependency>
<groupId>cn.ponfee</groupId>
<artifactId>disjob-{xxx}</artifactId>
<version>2.2.5</version>
</dependency>
```
## Build From Source
```shell
./mvnw clean install -DskipTests -Dcheckstyle.skip=true -Dmaven.javadoc.skip=true -U
```
## Versions
| Disjob version | Git branch | **Spring-boot version** | **JDK version** |
|----------------|-------------|-------------------------|-----------------|
| **2.2.5** | 2.2.x | 2.7.18