在上节中,我们成功地配置了执行器并且执行了我们设定的定时任务。在本节中,将带大家感受下XXL-JOB的一个特别的运行模式-GLUE模式以及感受下集群模式下的不同路由策略。
一、什么是GLUE模式?
我们先来回顾下我们现在的定时任务是怎么应用的,我们先在调度中心里配置个任务,接着在项目里对需要定时执行的方法加上XXL-JOB的注解,也就是说我们如果现在需要对某个方法改成定时任务是需要重新发版部署的。
但GLUE模式支持我们直接对线上的某个方法改造成定时任务,而无需重新部署发布,接下来让我们看看怎么做。
二、使用GLUE模式
为了方便测试,我声明一个测试方法,如下:
@Service
public class GlueTestService {
public void testMethod() {
System.out.println("定时任务执行时间" + new Date() + "testMethod()");
}
}
可以看到,我并没有使用XXL-JOB的相关注解,这就是个普通方法。假如我们现在的场景需要我们不重新发布服务,只需要临时地定时调用它,就可以用GLUE模式。于是,我们先回到调度中心的任务管理,如下:
我们新增一个任务,把运行模式调整成GLUE,其他暂时不需要关注,我们这里的执行频率每十秒执行一次,如下:
接着打开这个任务的GLUE IDE,如下:
打开后进入到一个在线IDE的界面,在这里我们将需要定时执行的Service注入进来并将需要定时执行的方法在执行方法中调用即可,如下:
这时候就可以点击保存了,备注建议根据代码变更写,方便后续出问题了回滚,我这里是测试就不讲究了,如下:
保存成功后,我们老规矩可以先执行一次进行测试,如下:
提示执行成功,然后我们回到项目的控制台,可以看到执行记录,如下:
然后我们启动这个任务,观察控制台输出结果,每隔10秒输出日志,如下:
三、负载均衡策略
通常我们部署在线上的服务不止一个实例,在多实例的情况下,我们肯定是期望定义的定时任务不会重复执行,XXL-JOB当然已经帮我们做到了,我们在这里也不细究这里的原理,主要是看看它在这里的路由策略。
1.准备工作
我们需要在本地启动多个demo实例进行测试,如下:
这里本地测试需要注意虚拟机配置除了服务的端口号还有执行器的端口号也要区分,如下:
回到调度中心的执行器管理页面,可以看到执行器的机器地址变成了两个实例,如下:
2.启动任务
回到任务管理页面,启动我们的那个测试任务,观察两个实例的控制台,如下:
可以看到只有一个机器上有执行记录,并没有重复执行,但是我们肯定不想让压力集中在一台机器上,就需要我们修改任务的路由策略,如下:
可以看到很多路由策略,我们可以根据自己的实际需求进行选择,这里我改成轮训策略,但需要注意的是:修改路由策略需要停止任务并重新启动,保存成功后,再次观察控制台,如下:
可以看到,现在是在两台机器之间轮训执行了,实现我们的需求。
四、小结
本篇简单介绍了XXL-JOB的GLUE模式与负载均衡策略,帮助各位读者对XXL-JOB的使用有了更多认识,下期作为本系列的最后一期讲讲任务如何实现分片。