在调度中心创建执行器与任务
在执行器管理当中创建执行器
1. 执行器的名称要和配置文件 当中的appname名称一样
切换到任务管理,创建任务
创建任务映射
启动项目-启动任务
注册到执行器当中
查看执行器我们可以看到执行当中有一个服务注册进来了
查看项目工程我们可以看到分布式任务开始执行了我们的程序
路径策略
1. 就是一个负载均衡 2. 当只有一个任务调度中心, 有多个执行器的时候 ,任务调度中心要选择一个或多个执行器来执行任务
对项目进行集群部署
1. 设置允许并行运行 2. 更改yml端口-进行运行
3.运行成功
4.可以看到注册了两台服务集群
1.我们可以看到10000是第一个那么到时候调度器就是按照这个顺序调用的
策略详解
一般使用故障转移
1. 修改任务管理调度器-故障转移 2. 当一台机器出现故障时, 转到移另一台机器上
启动多台服务注册到执行器
启动任务测试故障转移
执行之后我们可以发现
1. 按照我们注册到执行器的顺序来进行访问的 2. 我们进行将第一台服停止(宕机)
宕机(10001)后我们可以看到 9999 接受到了呢?
2. 宕机(10001)后xxl-job会发送心跳检查是否能调用,请求不了后xxl-job将会继续按照顺序执行那么就轮到了9999 来进行调度任务的操作
示例图-日志–
分片策略
1. 获取当前服务的索引: XxlJobHelper.getShardIndex(); 2. 获取执行器注册的总数: XxlJobHelper.getShardTotal(); 3. 修改任务路由策略为- 分片广播 4. 启动3个服务(因为我发现启动多个服务始终有一个是请求超时所以我们要用2个则多启动一个即可,官方还没提示bug的处理方案.) 5. 启动任务查看分片广播-分别发送了任务到两个服务上
@XxlJob("myJobHandler") public ReturnT<String> execute() { // 当前的调度号 机器的总数 List<Integer> users = Arrays.asList(1, 2, 3, 4, 5, 6, 7); for (Integer user : users) { // 获取机器的总数 getShardTotal // 获取当前机器的索引 getShardIndex if (user % XxlJobHelper.getShardTotal() == XxlJobHelper.getShardIndex()) { log.info("给{}号学生发送短信:index={},total={}", user, XxlJobHelper.getShardIndex(), XxlJobHelper.getShardTotal()); } } return ReturnT.SUCCESS; }
1-4-7 号任务分发到
其余的全部给到另外的服务上