栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

分布式任务调度解决方案

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分布式任务调度解决方案

分布式任务调度解决方案 一、xxl-job 1、引入xxl-job-core依赖

   com.xuxueli
   xxl-job-core
   2.3.0

2、配置文件
#xxljob
#调度中心服务地址
xxl.job.admin.addresses = http://172.16.138.184:8080/xxl-job-admin
#调度中心密钥,非空则启用
xxl.job.accessToken =
#执行器地址,填写以后可以在调度中心手动填写执行器地址
xxl.job.executor.address =
#执行器端口
xxl.job.executor.port = 9998
#日志保存位置
xxl.job.executor.logpath = /data/applogs/xxl-job/jobhandler
#日志保存时间,最少3天,否则不启用
xxl.job.executor.logretentiondays = 7
3、配置类
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class XxlJobConfig {

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

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

    @Value("${spring.application.name}")
    private String appname;

    @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() {
        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;
    }
}
4、执行器任务
@Slf4j
@Component
public class JijJobCentre {
    
    @Value("${job.used}")
    private boolean cronUsed;
    
	@XxlJob("jobName")
    public void jobName(){
        try {
            log.info("job:jobName start");
            if(!cronUsed){
                log.info("当前为外网服务,不做定时任务,jobName end");
                return;
            }
            System.out.println("job:jobName executor successful");
        }catch (Exception e){
            log.error("job:jobName error:{}",e.getMessage());
        }
        log.info("job:jobName end");
    }
}
5、调度中心配置

​ 1)启动xxl-job-admin服务,进入任务调度中心(ip:port/xxl-job-admin,用户名admin,密码123456)

​ 2)执行器管理->新增执行器,AppName为spring.application.name,选择自动注册模式,如果指定服务的ip和端口可以进行手动录入。保存后可以在OnLine机器地址里查看注册的服务。

​ 3)任务管理->新增任务。调度类型选择CRON,运行模式选择BEAN,JobHandler填写执行器任务中心的@XxlJob值。

6、其他
配置可选项说明
调度类型固定速度输入Second轮询
CRON按照CRON表达式执行
运行模式BEAN按照执行器任务中心的@XxlJob任务来执行
GLUD(*)按照写入的任务代码来执行
路由策略第一个当选择该策略时,会选择执行器注册地址的第一台机器执行,如果第一台机器出现故障,则调度任务失败。
最后一个当选择该策略时,会选择执行器注册地址的最后一台机器执行,如果最后一台机器出现故障,则调度任务失败。
轮询当选择该策略时,会按照执行器注册地址轮询分配任务,如果其中一台机器出现故障,调度任务失败,任务不会转移。
随机当选择该策略时,会按照执行器注册地址随机分配任务,如果其中一台机器出现故障,调度任务失败,任务不会转移。
一致性HASH当选择该策略时,每个任务按照Hash算法固定选择某一台机器。如果那台机器出现故障,调度任务失败,任务不会转移。
最不经常使用当选择该策略时,会优先选择使用频率最低的那台机器,如果其中一台机器出现故障,调度任务失败,任务不会转移。
(实践表明效果和轮询策略一致)
最近最久未使用当选择该策略时,会优先选择最久未使用的机器,如果其中一台机器出现故障,调度任务失败,任务不会转移。
(实践表明效果和轮询策略一致)
故障转移当选择该策略时,按照顺序依次进行心跳检测,如果其中一台机器出现故障,则会转移到下一个执行器,
若心跳检测成功,会选定为目标执行器并发起调度。
忙碌转移当选择该策略时,按照顺序依次进行空闲检测,如果其中一台机器出现故障,则会转移到下一个执行器,
若空闲检测成功,会选定为目标执行器并发起调度。
分片广播当选择该策略时,广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数;
可根据分片参数开发分片任务。如果其中一台机器出现故障,则该执行器执行失败,不会影响其他执行器。
阻塞策略单机串行调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行
丢弃后续调度调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败
覆盖之前调度调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务

*参考自https://www.freesion.com/article/8626516462/

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/672400.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号