* 背景 |
上篇博文讲述了如何使用XXL-Job,今天我们的讨论的是在此基础上的,更多的信息,请参看https://blog.youkuaiyun.com/SweetyoYY/article/details/81437149。
* 使用心得 |
最开始我入手xxl-job,晓得他有两部分,调度中心和控制器。那是我想的是将调度中心和控制器分离这种想法还是可行,不过下一步的想法便有些不合理,那就是将执行器和我们具体的项目分离。
如果执行器和我们具体的项目分离,会面对两个问题。人力:如果定时器由专门的人来负责,其实他是不必要关注具体的业务的,他也不知道哪个接口需要定时执行。但是分离之后,耦合性太强,也不符合单一职责。物力:分离之后,很直观的一个问题,便是远程的调用的问题,我们应该如何进行服务间的调用,dubbo是一套,spring boot是一套,我们是不是无形中有增加了工作量。
最终将执行器加入项目中,我们通过引入pom中依赖,来达成,这样做业务的可以将要定时执行的接口“标记”一下,我们在调动中心调度即可。还是要感谢项目中的使用,不然自己犹如井底之蛙,同时又有一句话可以形容我的心情,百无一用是书生。
* 加入集群 |
为什么我们要使用集群呢?说一说我们的项目,我们的执行器配置数量为2个,每个执行器中的任务有8,9个。其实这样的数量不算多,通过查看具体的任务,我发现一件事情,便是任务的执行时间比较频繁,这样对于执行器所在的服务器而言压力比较多,cpu占用过高。如果我们的服务器一旦宕机,那么造成项目的崩溃,于是我们将采取的方式是执行器集群。

接下来说一下如何配置执行器的集群:
1.在xxl-job-executor.properties中,配置执行器ip时我们不进行ip的配置,使其为空,当其为空时,执行器便会自动寻找宿主机的ip。
2.调度中心新增执行器时,注册方式选择自动,这是的appName一定要跟xxl-job-executor.properties配置一直,这是调度中心可以访问到执行器的关键。

3.任务的轮询方式也不在单一了,我们可以使用轮询,忙碌转移,故障转移等方式。

* 遇到的问题 |
任务在执行的过程中,一直处于执行的状态,不能自动中完成,必须要手动的终止任务,如下:

出现这种情况是因为,调度中心成功的完成的调度,跟执行器单方面的交互成功,但是任务执行完成后,回调是并没有找到调度中心。这样的问题是执行器配置中结果回调的地址有问题,看看调度中心的地址是xxl.job.admin.addresses=http://127.0.0.1:8080还是xxl.job.admin.addresses=http://127.0.0.1:8080 /xxl-job-admin
* 结语 |
在项目上线后我们能发现更多的问题,比我们臆想的问题要多一些同时也要意外一些。解决之后回头想想,也不是那样的意外与棘手,如果我们从根源上去发现,便可以搞定了。
感谢您宝贵的阅读时间。