一、XXL-JOB介绍
分布式调度平台XXL-JOB介绍
在分布式环境下进行任务调度需要使用分布式任务调度平台,XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等等...
官网地址:https://github.com/xuxueli/xxl-job
XXL-JOB主要有调度中心、执行器、任务:

调度中心:
负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码;
主要职责为执行器管理、任务管理、监控运维、日志管理等。
任务执行器:
负责接收调度请求并执行任务逻辑;
主要职责是执行任务、执行结果上报、日志服务等。
使用XXL-JOB就可以解决使用多个jvm进程重复执行任务的问题,如下图:

XXL-JOB调度中心可以配置路由策略,比如:第一个、轮询策略、分片等,它们分别表示的意义如下:
第一个:即每次执行任务都由第一个执行器去执行。
轮询:即执行器轮番执行。
分片:每次执行任务广播给每个执行器让他们同时执行任务。
如果根据需求每次执行任务仅由一个执行器去执行任务可以设置路由策略:第一个、轮询。如果根据需求每次执行任务由多个执行器同时执行可以设置路由策略为:分片。
二、使用xxljob定时更新缓存
2.1 XXL-JOB搭建配置
- 1)配置xxl-job,进入nacos,配置shared-xxl-job.yaml:
address:调度中心的地址
appName:执行器名称,为spring.application.name表示微服务的名称(在bootstrap.yml中配置)
port:执行器端口号,通过xxl-job.port配置
-
2)在foundations.yaml中配置执行器的端口:
-
3)在foundations中加载shared-xxl-job.yaml:
-
4)进入调度中心,进入执行器管理界面:
AppName:执行名称,在shared-xxl-job.yaml中指定执行器名称就是微服务的应用名。
名称:取一个中文名称。
注册方式:自动注册,只要执行器和调度中心连通执行器会自动注册到调度中心
机器地址:自动注册时不用填写。
2.2 定义缓存更新任务
定义缓存更新任务
1)编写任务方法
定时执行任务就需要编写任务方法,此任务方法由执行器去调用。
下边代码中demoJobHandler()就是一个任务方法,需要使用@XxlJob注解标识,所在类需要由spring去管理,所以加了@Component注解。
java
@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
}
根据目标,使用xxl-job定时更新开通区域列表的缓存。
java
@Slf4j
@Component
public class SpringCacheSyncHandler {
@Resource
private IRegionService regionService;
@Resource
private RedisTemplate redisTemplate;
@XxlJob(value = "activeRegionCacheSync")
public void activeRegionCacheSync() {
log.info(">>>>>>>>开始进行缓存同步");
//1.清理缓存
String key = RedisConstants.CacheName.JZ_CACHE + "::ACTIVE_REGIONS";
redisTemplate.delete(key);
//2.刷新缓存
regionService.queryActiveRegionListCache();
log.info(">>>>>>>>更新缓存完成");
}
}
2)配置任务
在调度中心配置任务。进入任务管理,新增任务:
3)启动任务并测试