您的位置 首页 java

分布式任务调度 xxl-job

一、为什么需要任务调度

Java 中,传统的定时任务实现方案,比如Timer, Quartz 等都或多或少存在一些问题:

  • 不支持集群、不支持统计、没有管理平台、没有失败报警、没有监控等等

而且在现在分布式的架构中,有一些场景需要分布式任务调度:

  • 同一个服务多个实例的任务存在互斥时,需要统一的调度。
  • 任务调度需要支持高可用、监控、故障告警。
  • 需要统一管理和追踪各个服务节点任务调度的结果,需要记录保存任务属性信息等。

显然传统的定时任务已经不满足现在的分布式架构,所以需要一个分布式任务调度平台,目前比较主流的是elasticjob和xxl-job

二、xxl-job的下载

三、启动xxl-job

打包xxlJobAdmin.jar,使用命令java -jar xxlJobAdmin.jar

  1. 监控任务的情况
  2. 对任务的管理
  3. 查询调度的日志
  4. 执行器的相关管理

四、SpringBoot中配置xxl-job

 
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.beans.factory. annotation .Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
@ConditionalOnProperty(name = "xxl.job.admin.enable", havingValue = "true")
public class XxlJobConfig {

    @Value("${xxl.job.admin.addresses}")
     private  String adminAddresses;

    @Value("${xxl.job.executor.appname}")
    private String appName;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;

    //XXL-JOB,分布式任务调度平台升级 v2.1.2 后遇到的坑XXL-JOB,分布式任务调度平台升级 v2.1.2 后遇到的坑
    //把@Bean(initMethod = "start", destroyMethod = "destroy") 改成 @Bean 即可。就不会出现以上端口占用的问题!
    //@Bean(initMethod = "start", destroyMethod = "destroy")
    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appName);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }

}  

五、配置文件中往xxl-job中注册

 ### 是否开启xxljob
xxl.job.admin.enable=true
### xxl-job admin address list:调度中心部署跟地址:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果 回调 "。
xxl.job.admin.addresses=
### xxl-job executor address:执行器"AppName"和地址信息配置:AppName执行器心跳注册分组依据;地址信息用于" 调度中心 请求并触发任务"和"执行器注册"。执行器默认端口为9999,执行器IP默认为空表示自动获取IP,多网卡时可手动设置指定IP,手动设置IP时将会绑定Host。单机部署多个执行器时,注意要配置不同执行器端口;
xxl.job.executor.appname=xxl-job-executor-sample
xxl.job.executor.ip=
xxl.job.executor.port=9999
### xxl-job, access token:执行器通讯TOKEN,非空时启用
xxl.job.accessToken=
### xxl-job log path:执行器运行日志文件存储的磁盘位置,需要对该路径拥有读写权限
xxl.job.executor.logpath=
### xxl-job log retention days:执行器Log文件定期清理功能,指定日志保存天数,日志文件过期自动删除。限制至少保持3天,否则功能不生效;
xxl.job.executor.logretentiondays=-1  

六、SpringBoot中配置xxl-job的 JobHandler

 /***
 * 日志文件
 */@Slf4j
@Component
public class ScheduleLog {

    @XxlJob("logJobHandlelr")
    public ReturnT<String> execute(String param) {
      //此处处理定时调度的任务逻辑
        return ReturnT.SUCCESS;
    }

}  

文章来源:智云一二三科技

文章标题:分布式任务调度 xxl-job

文章地址:https://www.zhihuclub.com/179676.shtml

关于作者: 智云科技

热门文章

网站地图