[分布式任务调度框架:xxl-job]初识xxl-job

XXL-JOB[学习笔记·一]

前言
  • 题主也是第一次接触xxl-job,那我会把自己学习的过程,自己的思路以及技巧记录下来
  • 学习笔记一会大概介绍我认为的xxl-job,以及会跟着文档跑demo
  • 后面的学习笔记会从执行器的角度去分析阅读源码,如果时间充裕的话会继续更新调度中心的源码阅读
xxl-job是什么
  1. 学习xxl-job之前,先来回顾以往我们认识的任务调度
  • linux的crontab
  • Spring下的任务调度
@Slf4j
@Component
public class MyTask {
    @Scheduled(fixedRate = 1000L)
    public void run() {
        log.info("正在执行每秒一次的任务");
    }
}
复制代码
  • 为什么有了@Scheduled我们还要xxl-job呢?因为spring提供的调度注解比较简单,如果我们一个spring应用部署了N个节点,那么每个节点都会跑任务,如果任务不具备“幂等”,那么就会产生一些预期外的错误,当然我们可以自己写一些规则,让任务只跑在一个节点上,比如抢占一把分布式锁等.当然真实环境远远不止这么简单,xxl-job的出现就是帮我们把这些可能遇到的事情给解决了
  1. xxl-job是一个分布式任务调度框架,关键字[分布式,任务调度]
  • 分布式是什么?我的理解比较俗,分布就是散落,形容一个系统是分布式系统,也就是描述当前这个系统应用是由多个不同的应用散落在不同的节点组合而成,为上游服务
  • 什么是任务调度?让任务在指定的时间,或者指定频率去触发,就是我理解的任务调度
  • xxl-job就是可以协同N个相同或者不同的任务应用,在指定的时间点或指定的频率下去执行
  1. 如何学习xxl-job
  • 学习一个新工具/框架最好的方法是:先大概了解这是个啥/我会用这个东西来达成什么目的/猜测它是什么样的工作原理/阅读相关的资料/跑DEMO/跟着主要的链路DEBUG
  • 点击跳转到xxl-job的文档
跑一遍DEMO
  1. 环境准备
  • git/maven/mysql/jdk8+
  1. gitee地址,先clone下来
  2. 执行xxl-job\doc\db\tables_xxl_job.sql
  3. 修改xxl-job-admin的application.properties,把数据库地址,账号密码修改成本地
  4. maven执行clean compile,运行xxl-job-admin,然后访问http://localhost:8080/xxl-job-admin,初始账号密码是admin/123456
  5. xxl-job-executor-samples\xxl-job-executor-sample-springboot
  • 修改application.properties,xxl.job.executor.logpath=D:\logs
  • 运行com.xxl.job.executor.XxlJobExecutorApplication
  1. 在admin创建一个任务,然后执行后观察日志(D:\logs\2021-12-14)
  • 1.png
2021-12-14 22:54:34 [com.xxl.job.core.thread.JobThread#run]-[130]-[Thread-19] <br>----------- xxl-job job execute start -----------<br>----------- Param:
2021-12-14 22:54:34 [com.xxl.job.executor.service.jobhandler.SampleXxlJob#demoJobHandler]-[39]-[Thread-19] XXL-JOB, Hello World.
2021-12-14 22:54:34 [com.xxl.job.executor.service.jobhandler.SampleXxlJob#demoJobHandler]-[42]-[Thread-19] beat at:0
2021-12-14 22:54:36 [com.xxl.job.executor.service.jobhandler.SampleXxlJob#demoJobHandler]-[42]-[Thread-19] beat at:1
2021-12-14 22:54:38 [com.xxl.job.executor.service.jobhandler.SampleXxlJob#demoJobHandler]-[42]-[Thread-19] beat at:2
2021-12-14 22:54:40 [com.xxl.job.executor.service.jobhandler.SampleXxlJob#demoJobHandler]-[42]-[Thread-19] beat at:3
2021-12-14 22:54:42 [com.xxl.job.executor.service.jobhandler.SampleXxlJob#demoJobHandler]-[42]-[Thread-19] beat at:4
2021-12-14 22:54:44 [com.xxl.job.core.thread.JobThread#run]-[176]-[Thread-19] <br>----------- xxl-job job execute end(finish) -----------<br>----------- Result: handleCode=200, handleMsg = null
2021-12-14 22:54:44 [com.xxl.job.core.thread.TriggerCallbackThread#callbackLog]-[197]-[xxl-job, executor TriggerCallbackThread] <br>----------- xxl-job job callback finish.
复制代码
tip
  1. 调度中心(剥离任务逻辑,单纯执行任务调度的节点)
  2. 执行器(任务运行的节点)
  3. 无论是调度中心还是执行器,都是可以集群部署的,并且创建任务的时候,可以指定广播执行还是单一执行,也具备快速失败切换的功能等
结尾
  1. 整个文章仅有一点个人见解,其他的实践基本都是按照文档的介绍来完成的,非常简单
  2. 第二篇笔记将会从执行器的角度来解读源码,理解整体框架逻辑

猜你喜欢

转载自juejin.im/post/7041573816773902366