1. 引言
随着互联网业务的不断扩展和复杂化,分布式任务调度成为了构建大规模系统的重要组成部分。XXL-Job作为一款开源的分布式任务调度平台,提供了完整的任务调度和管理功能,被广泛应用于各种场景。本文将介绍如何入门使用XXL-Job,通过实战演示帮助读者快速上手分布式任务调度。
2. Xxl-job介绍
XXL-Job 是一款开源的分布式任务调度平台,由阿里巴巴开发团队提供支持。它提供了完整的任务调度和管理功能,能够帮助用户实现分布式环境下的任务调度、执行和监控。XXL-Job具有轻量、易用、稳定的特点,广泛应用于各种业务场景。
2.1 主要特性
- 任务管理: 支持任务的新增、编辑、暂停、恢复、删除等操作,提供了丰富的任务管理功能。
- 分布式执行: 支持分布式部署,任务执行器可以部署在不同的节点上,实现任务的分布式执行。
- 调度监控: 提供了任务执行情况的监控和统计功能,包括任务执行次数、执行状态、执行日志等信息。
- 动态调度: 支持任务的动态调度和执行,可以根据实际业务需求灵活调整任务的执行策略和执行时间。
- 报警机制: 支持任务执行异常时的报警机制,可配置报警方式和报警接收人,及时发现和处理任务执行异常情况。
- 任务分片: 支持将任务分片执行,提高任务执行效率,同时支持分片广播,确保任务的执行顺序和一致性。
- 扩展性: 支持自定义任务执行器和调度策略,可以根据业务需求进行灵活扩展和定制。
2.2 架构设计
XXL-Job的架构设计主要包括调度中心、执行器、数据库、消息队列等组件。调度中心负责任务的调度和管理,执行器负责接收调度中心分配的任务并执行,数据库用于存储任务信息和调度规则,消息队列用于调度中心和执行器之间的通信。
引用自官网的架构图
2.3 应用场景
XXL-Job广泛应用于各种业务场景,包括但不限于数据处理和计算任务调度、定时任务调度、异步任务调度、实时任务调度等。它能够帮助用户实现任务的统一调度和管理,提高系统的稳定性和可靠性。
3. 快速开始
3.1 下载安装
首先,从XXL-Job的官方网站下载最新版本的发布包,并解压到本地目录。这里演示以源码的方式启动,其他方式可以参考官网文档:
github:GitHub - xuxueli/xxl-job at 2.4.0
3.2 配置数据库
将db目录下的sql文件在mysql里执行初始化xxl所需的表,进入解压后的xxl-job-admin
工程,编辑application.properties
文件,配置数据库连接信息。
3.3 启动服务
在xxl-job-admin
目录下执行以下命令启动XXL-Job Admin服务:
4. 创建任务
4.1 登录管理界面
打开浏览器,访问http://localhost:8080/xxl-job-admin
,使用默认的管理员账号和密码admin/123456登录。
4.2 新增执行器
在页面上的执行器管理新增,填写AppName,就是代码里定义的
xxl.job.executor.appname=xxl-job-executor-sample
4.3 新增任务
在左侧菜单栏选择“调度中心” -> “任务管理”,点击“新增”按钮,填写任务名称、执行器、执行方式等信息。
其中执行器是自动注册好的,可以在页面上查看执行器的地址(远程调用),JobHandler就是代码中定义的@Xxl-job注解定义的值
5. SpringBoot集成
源码里有springboot集成的demo,下面是截图,其中XxlJobConfig.java是核心类,如果缺少这个,执行器是无法注册到xxl-job上的。
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* xxl-job config
*
* @author xuxueli 2017-04-28
*/
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.appname}")
private String appname;
@Value("${xxl.job.executor.address}")
private String address;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppname(appname);
xxlJobSpringExecutor.setAddress(address);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
5.1 创建执行任务
在项目中创建一个实现IJobHandler
接口的执行器类,实现execute
方法,编写任务逻辑代码。
@Component
public class SampleXxlJob {
private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);
/**
* 1、简单任务示例(Bean模式)
*/
@XxlJob("demoJobHandler")
public void demoJobHandler() throws Exception {
XxlJobHelper.log("XXL-JOB, Hello World.");
for (int i = 0; i < 5; i++) {
XxlJobHelper.log("beat at:" + i);
TimeUnit.SECONDS.sleep(2);
}
// default success
}
}
6. 启动任务
在任务管理界面中选择刚刚创建的任务,点击“启动”按钮,启动配置好的任务。也可以执行一次,可以看到已经调用到本地的任务代码里了。
6.1 查看调度日志
7. 总结
通过本文的介绍和实战演示,读者可以快速了解并上手使用 XXL-Job 进行任务调度管理。XXL-Job 提供了简单易用的界面和丰富的功能,能够满足各种任务调度需求,是一款值得推荐的分布式任务调度平台。
更多文章
presto/trino 入门介绍实战_presto和trino怎么选-CSDN博客