python任务调度平台界⾯_分布式任务调度平台XXL-JOB搭建
教程
关于分布式任务调度平台XXL-JOB,其实作者 许雪⾥在其发布的中⽂教程中已经介绍的很清楚了,这⾥我就不做过多的介绍了,关于其搭建教程,本⼈依照其⽂档搭建起来基本上也没遇到啥问题,这⾥通过博客的形式记录下来。
1、源码下载地址
2、⽂档地址
3、源码结构
通过上⾯给出的源码下载地址,我们将源码clone到IDEA中,如下:
4、初始化数据库
初始化脚本在上⾯源码⽬录的 /doc/db/tables_xxl_job.sql ,将此脚本在MySQL数据库中执⾏⼀遍。
执⾏完毕,会在MySQL数据库中⽣成如下 16 张表:
5、配置调度中⼼
调度中⼼就是源码中的 xxl-job-admin ⼯程,我们需要将其配置成⾃⼰需要的调度中⼼,通过该⼯程我们能够以图形化的⽅式统⼀管理任务调度平台上调度任务,负责触发调度执⾏。
①、修改调度中⼼配置⽂件
⽂件地址:/xxl-job/xxl-job-admin/src/main/resources/xxl-job-admin.properties
配置⽂件说明:
1 ### 1、调度中⼼项⽬的端⼝号以及访问路径
2 server.port=8080
t-path=/xxl-job-admin4
5 ### 2、配置静态⽂件的前缀
6 spring.mvc.static-path-pattern=/static/**
sources.static-locations=classpath:/static/8
9 ### 3、配置模板⽂件10 plateLoaderPath=classpath:/templates/11 spring.freemarker.suffix=.ftl12 spring.freemarker.charset=UTF-813 quest-context-attribute=request14
spring.freemarker.settings.number_format=0.>>15
16 ### 4、配置mybatis的mapper⽂件地址17 mybatis.mapper-locations=classpath:/mybatis-mapper/*l18
19 ### 5、配置数据库的地址20 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl-job?
Unicode=true&characterEncoding=UTF-821 spring.datasource.username=root22 spring.datasource.password=root_pwd23 spring.datasource.sql.jdbc.Driver24
25 pe=at.jdbc.pool.DataSource26 at.max-wait=1000027 at.max-active=3028 at.test-on-borrow=true29
at.validation-query=SELECT 130 at.validation-interval
=3000031
32 ### 6、配置报警邮箱33 spring.mail.host=smtp.qq34 spring.mail.port=2535 spring.mail.username=xxx@qq36 spring.mail.password=xxx37 spring.mail.properties.mail.smtp.auth=true38
spring.mail.properties.mail.able=true39 spring.mail.properties.mail.quired=true40
41
42 ### 7、管理界⾯的登录⽤户名密码43 xxl.job.login.username=admin44 xxl.job.login.password=12345645
46 ### 8、调度中⼼通讯TOKEN,⾮空时启⽤47 xxl.job.accessToken=48
49 ### 9、调度中⼼国际化设置,默认为中⽂版本,值设置为“en”时切换为英⽂版本50 xxl.job.i18n=
注意:基本上上⾯的配置⽂件我们需要修改的只有第 5 点,修改数据库的地址,这要与我们前⾯初始化的数据库名称径,⽤户名密码保持⼀致;
第⼆个就是修改第 6 点,报警邮箱,因为该⼯程任务失败后有失败告警功能,可以通过邮件来提醒,如果我们需要此功能,可以配置⼀下。
②、部署调度中⼼
该⼯程是⼀个springboot项⽬,我们只需要在IDEA中执⾏ XxlJobAdminApplication 类即可运⾏该⼯程:
③、访问调度中⼼管理界⾯
6、创建执⾏器项⽬
其实在源码中,作者提供了各个版本的 执⾏器项⽬,下⾯我以创建⼀个 springboot 版本的执⾏器为例来介绍。
①、添加maven依赖
在创建好的springboot 项⽬的l ⽂件中添加如下依赖:
1
2
3 com.xuxueli
4 xxl-job-core
5 2.0.1
6
②、配置执⾏器
在创建好的springboot 项⽬的配置⽂件 l 添加如下配置:
1 server:
2 #项⽬端⼝号
3 port: 8081
4 logging:
5 #⽇志⽂件
6 config: l7
15 #分别配置执⾏器的名称、ip地址、端⼝号16 #注意:如果配置多个执⾏器时,防⽌端⼝冲突17 executor:18 appname: executorDemo19 ip: 127.0.0.120 port: 999921
22 #执⾏器运⾏⽇志⽂件存储的磁盘位置,需要对该路径拥有读写权限23 logpath: /data/applogs/xxl-job/jobhandler24 #执⾏器Log ⽂件定期清理功能,指定⽇志保存天数,⽇志⽂件过期⾃动删除。限制⾄少保持3天,否则功能不⽣效;25 #-1表⽰永不删除26 logretentiondays: -1
这⾥需要注意的是:配置执⾏器的名称、IP地址、端⼝号,后⾯如果配置多个执⾏器时,要防⽌端⼝冲突。再就是执⾏器的名称,我们后⾯会到上⼀步的调度中⼼管理界⾯进⾏对应配置。
③、载⼊配置⽂件
在项⽬中创建 XxlJobConfig.class ⽂件:
1 fig;2
xecutor.impl.XxlJobSpringExecutor;
4 importorg.slf4j.Logger;
5 importorg.slf4j.LoggerFactory;
6 importorg.springframework.beans.factory.annotation.Value;
7 t.annotation.Bean;
8 t.annotation.Configuration;9
10 /**
11 * Create by YSOcean12 */
13 @Configuration14 public classXxlJobConfig {15 private Logger logger =
17 @Value("${xxl.job.admin.addresses}")18 privateString adminAddresses;19
20 @Value("${utor.appname}")21 privateString appName;22
23 @Value("${utor.ip}")24 privateString ip;25
26 @Value("${utor.port}")27 private intport;28
29 @Value("${xxl.job.accessToken}")30 privateString accessToken;31
32 @Value("${utor.logpath}")33 privateString logPath;34
35 @Value("${utor.logretentiondays}")36 private intlogRetentionDays;37
38
39 @Bean(initMethod = "start", destroyMethod = "destroy")40 publicXxlJobSpringExecutor xxlJobExecutor() {41
python新建项目教程logger.info(">>>>>>>>>>> xxl-job config init.");42 XxlJobSpringExecutor xxlJobSpringExecutor =
newXxlJobSpringExecutor();43 xxlJobSpringExecutor.setAdminAddresses(adminAddresses);44
xxlJobSpringExecutor.setAppName(appName);45 xxlJobSpringExecutor.setIp(ip);46 xxlJobSpringExecutor.setPort(port);47 xxlJobSpringExecutor.setAccessToken(accessToken);48 xxlJo
bSpringExecutor.setLogPath(logPath);49 xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);50
51 returnxxlJobSpringExecutor;52 }53
54 }
View Code
④、创建任务JobHandler
在项⽬中创建⼀个Handler,⽤于执⾏我们想要执⾏的东西,这⾥我只是简单的打印⼀⾏⽇志:
XXL-JOB, Hello World
1 ljobexecutordemo.jobhandler;2
del.ReturnT;
handler.IJobHandler;5
importorg.springframework.stereotype.Component;8
9 /**
10 * 任务Handler⽰例(Bean模式)11 *12 * 开发步骤:13 * 1、继承"IJobHandler":“handler.IJobHandler”;14 * 2、注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例;15 * 3、注册到执⾏器⼯⼚:添
加“@JobHandler(value="⾃定义jobhandler名称")”注解,注解value值对应的是调度中⼼新建任务的JobHandler属性的值。16 * 4、执⾏⽇志:需要通过 "XxlJobLogger.log" 打印执⾏⽇志;17 */
18 @JobHandler(value="demoJobHandler")19 @Component20 public class JobHandlerDemo extendsIJobHandler{21
@Override22 public ReturnT execute(String s) throwsException {23 XxlJobLogger.log("XXL-JOB, Hello World.");24 returnSUCCESS;25 }26 }
View Code
注意:这⾥有个注解 @JobHandler(value="demoJobHandler"),对于 value的值,我们会在下⾯进⾏相应配置。
7、在调度中⼼中配置执⾏器
①、配置执⾏器
点击 执⾏器管理----》新增执⾏器---》,如下如下界⾯,然后填充此表格,点击保存即可。
下⾯是对这⼏个参数的介绍:
AppName:是每个执⾏器集的唯⼀标⽰AppName, 执⾏器会周期性以AppName为对象进⾏⾃动注册。可通过该配置⾃动发现注册成功的执⾏器, 供任务调度时使⽤;
名称:执⾏器的名称, 因为AppName限制字母数字等组成,可读性不强, 名称为了提⾼执⾏器的可读性;
排序: 执⾏器的排序, 系统中需要执⾏器的地⽅,如任务新增, 将会按照该排序读取可⽤的执⾏器列表;
注册⽅式:调度中⼼获取执⾏器地址的⽅式,
⾃动注册:执⾏器⾃动进⾏执⾏器注册,调度中⼼通过底层注册表可以动态发现执⾏器机器地址;
⼿动录⼊:⼈⼯⼿动录⼊执⾏器的地址信息,多地址逗号分隔,供调度中⼼使⽤;
机器地址:"注册⽅式"为"⼿动录⼊"时有效,⽀持⼈⼯维护执⾏器的地址信息;
②、创建任务
点击 任务管理---》新增任务---》
执⾏器:任务的绑定的执⾏器,任务触发调度时将会⾃动发现注册成功的执⾏器, 实现任务⾃动发现功能; 另⼀⽅⾯也可以⽅便的进⾏任务分组。每个任务必须绑定⼀个执⾏器, 可在 "执⾏器管理" 进⾏设置。
任务描述:任务的描述信息,便于任务管理;
路由策略:当执⾏器集部署时,提供丰富的路由策略,包括;
FIRST(第⼀个):固定选择第⼀个机器;
LAST(最后⼀个):固定选择最后⼀个机器;
ROUND(轮询):;
RANDOM(随机):随机选择在线的机器;
CONSISTENT_HASH(⼀致性HASH):每个任务按照Hash算法固定选择某⼀台机器,且所有任务均匀散列在不同机器上。
LEAST_FREQUENTLY_USED(最不经常使⽤):使⽤频率最低的机器优先被选举;
LEAST_RECENTLY_USED(最近最久未使⽤):最久为使⽤的机器优先被选举;
FAILOVER(故障转移):按照顺序依次进⾏⼼跳检测,第⼀个⼼跳检测成功的机器选定为⽬标执⾏器并发起调度;
BUSYOVER(忙碌转移):按照顺序依次进⾏空闲检测,第⼀个空闲检测成功的机器选定为⽬标执⾏器并发起调度;
SHARDING_BROADCAST(分⽚⼴播):⼴播触发对应集中所有机器执⾏⼀次任务,同时系统⾃动传递分⽚参数;可根据分⽚参数开发分⽚任务;
Cron:触发任务执⾏的Cron表达式;
运⾏模式:
BEAN模式:任务以JobHandler⽅式维护在执⾏器端;需要结合 "JobHandler" 属性匹配执⾏器中任务;
GLUE模式(Java):任务以源码⽅式维护在调度中⼼;该模式的任务实际上是⼀段继承⾃IJobHandler的Java类代码并 "groovy" 源码⽅式维护,它在执⾏器项⽬中运⾏,可使⽤@Resource/@Autowire注⼊执⾏器⾥中的其他服务;
GLUE模式(Shell):任务以源码⽅式维护在调度中⼼;该模式的任务实际上是⼀段 "shell" 脚本;
GLUE模式(Python):任务以源码⽅式维护在调度中⼼;该模式的任务实际上是⼀段 "python" 脚本;
GLUE模式(PHP):任务以源码⽅式维护在调度中⼼;该模式的任务实际上是⼀段 "php" 脚本;
GLUE模式(NodeJS):任务以源码⽅式维护在调度中⼼;该模式的任务实际上是⼀段 "nodejs" 脚本;
GLUE模式(PowerShell):任务以源码⽅式维护在调度中⼼;该模式的任务实际上是⼀段 "PowerShell" 脚本;
JobHandler:运⾏模式为 "BEAN模式" 时⽣效,对应执⾏器中新开发的JobHandler类“@JobHandler”注解⾃定义的value值;
阻塞处理策略:调度过于密集执⾏器来不及处理时的处理策略;
单机串⾏(默认):调度请求进⼊单机执⾏器后,调度请求进⼊FIFO队列并以串⾏⽅式运⾏;
丢弃后续调度:调度请求进⼊单机执⾏器后,发现执⾏器存在运⾏的调度任务,本次请求将会被丢弃并标记为失败;
覆盖之前调度:调度请求进⼊单机执⾏器后,发现执⾏器存在运⾏的调度任务,将会终⽌运⾏中的调度任务并清空队列,然后运⾏本地调度任务;
⼦任务:每个任务都拥有⼀个唯⼀的任务ID(任务ID可以从任务列表获取),当本任务执⾏结束并且执⾏成功时,将会触发⼦任务ID所对应的任务的⼀次主动调度。
任务超时时间:⽀持⾃定义任务超时时间,任务运⾏超时将会主动中断任务;
失败重试次数;⽀持⾃定义任务失败重试次数,当任务失败时将会按照预设的失败重试次数主动进⾏重试;
报警邮件:任务调度失败时邮件通知的邮箱地址,⽀持配置多邮箱地址,配置多个邮箱地址时⽤逗号分隔;
负责⼈:任务的负责⼈;
执⾏参数:任务执⾏所需的参数,多个参数时⽤逗号分隔,任务执⾏时将会把多个参数转换成数组传⼊;
8、启动任务
配置完执⾏器以及任务,我们只需要启动该任务,便可以运⾏了。
启动之后,我们查看⽇志:
我们上⾯配置任务时的cron表达式是每秒钟执⾏⼀次(0/1 * * * * ? *):
打印⽇志如下:
注意:在项⽬中,只有通过 XxlJobLogger.log() 代码才能将⽇志打印到上⾯。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
VS2019安装和使用教程(超详细)
« 上一篇
使用python批量获取文件名,并新建文件、目录
下一篇 »
发表评论