分布式调度中间件xxl-job(二):项目总览

2022-02-08 11:27:12 浏览数 (1)

人生苦短,不如养狗

  经过前面的学习,想必大家对xxl-job都有了一个初步的认识。为了更进一步的深入了解xxl-job,下面我们一起来撸一撸源码,跑一跑示例,探索一下大佬是如何写出这么优秀的工具。

一、源码下载

  目前,xxl-job在github和码云上都有维护代码库,地址如下:

  • Github地址:https://github.com/xuxueli/xxl-job/
  • 码云(gitee)地址:https://gitee.com/xuxueli0323/xxl-job

  在下载地址之前推荐大家先把代码fork到自己的github或者gitee账号中。这样,在自己fork的仓库中我们可以进行一些代码的注释和自定义扩展。

二、项目结构

  完成代码下载之后,可以看到项目结构如下:

  从上图中可以看到,xxl-job项目代码主要分为以下四个部分:

  • doc文件夹:doc文件夹中放置了调度中心xxl-job-admin需要的建表语句和使用文档;
  • xxl-job-admin:xxl-job的调度中心,也是运维后台。调度中心提供了运行报表、大盘、执行器以及调度器注册、运行状态以及日志查看等运维功能;
  • xxl-job-core:xxl-job的核心模块。在该模块中实现了任务模块、执行器模块、自研rpc、GLUE脚本编译和执行模块、日志模块、服务注册和发现、健康检查等功能。这个模块也是我们在使用xxl-job时需要引入的模块。
  • xxl-job-executor-samples:在这个模块中放置了各种框架使用xxl-job的例子。这里我们主要研究在SpringBoot中是如何使用的。具体结构如下图:

  从项目结构不难看出,xxl-job相比其他同类型的分布式调度中间件来说,项目结构要简单很多,整体学习和使用的成本也低了很多。  

从整体上来看,xxl-job将作业调度中作业、执行器、调度器三个概念进行拆分和组装。将调度器放置在了调度中心,将作业执行器两个概念进行聚合。下图给出了一个简单的逻辑关系:

  后续对于源码的学习,我们也就从执行器(含任务)、调度器、调度中心这是三个大的方面进行学习。下面我们来看一下示例代码是如何运行。

三、运行示例

1. 启动前的准备

  首先我们需要启动xxl-job的调度中心,也就是xxl-job-admin。在启动之前,我们需要将执行tables_xxl_job.sql文件中的建表语句。  

完成建表语句之后,启动xxl-job-admin,然后登陆调度中心(http://localhost:8080/xxl-job-admin/),账号和密码分别是admin和123456。打开任务调度中心,可以看到如下页面:

  在调度中心的首页展示了调度报表和大盘情况,可以很方便的看到整体的调度情况。除此以外,调度中心还可以创建调度器、进行任务和执行器管理、执行日志查看等。

  这里我们点开执行器管理,可以看到一条示例执行器。

  可以发现,此时这个示例执行器是没有在线机器的,下面我们就来启动我们的示例执行器。

2. 启动执行器

  我们找到xxl-job-executor-samples中SpringBoot的示例,然后启动。重新刷新调度中心的页面,可以发现示例执行器已经有一台机器上线了:

  然后我们打开任务管理,这里已经给配置好了一个示例触发器,我们直接点击操作—>执行一次,然后查看日志:

  至此,我们完成了一次简单的示例任务的执行测试。

四、总结

  在上面的示例中,闲鱼简单演示了一个任务是如何进行触发一次的操作,示例中执行器和触发器的注册初始化脚本中已经进行了处理,具体的注册内容大家可以查看一下官方文档。

  对比闲鱼现在项目组使用Elastic-Job来看,中心化理念的xxl-job对触发器进行了剥离,在使用上需要在调度中心进行触发器的注册,并关联对应的任务,步骤上略显繁琐。但任务管理和执行器管理功能给开发同学运维工作带来了极大的方便,这里还是见仁见智,看诸位大佬的需求如何。

0 人点赞