分布式定时任务(xxl-job)

简介

什么是XXL-JOB

详细的文档类容可以看下面这个链接进入readme
xxl-job简介以及下载地址

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展

在Java Spring Cloud微服务架构中,使用独立的定时任务调度中心(如XXL-JOB、Elastic-Job等)来统一管理所有定时任务,是一种更符合分布式系统设计原则的最佳实践。以下是详细的解释和关键点:

为什么推荐集中式调度(XXL-JOB)而不是@Scheduled?

以前的单机springboot项目的时候咱们执行定时任务就是加上@Scheduled注解

但是随着项目增大,单实例的项目资源就不够用了,这时候有些公司就会在同一台服务器部署多实例项目,通过负载均衡,减少了单实例(也可以理解为一台jvm本身资源的限制问题),但是在定时任务过程中会遇到多实例多次调用定时任务的问题,解决办法呢也不难,加上分布式锁就行了,例如redisson加锁,让同一时间只有一个任务能执行。

这样问题是解决了,但是项目随着时间又急速扩大,这时候服务越来越多,形成了多个微服务,这时候项目逐渐转型为springcloud,那么现在手动添加的@scheduled的定时任务就太分散了,不利于管理。

因此xxl-job应运而生。

xxl-job的运行方式

简单点来说就是在xxl-job服务中调用其他服务器的远程接口

java 复制代码
                +------------------+
                |   XXL-JOB Admin  |
                +------------------+
                         |
                         | (调度HTTP/RPC)
                         v
+------------------+     +------------------+     +------------------+
|     Order Service|     |  Payment Service |     | Inventory Service|
| (提供任务执行接口)|     | (提供任务执行接口)|     | (提供任务执行接口)|
+------------------+     +------------------+     +------------------+

安装

首先下载源码,简介中已经提供地址,下面是项目目录

数据库

导入数据之后结构如下,下面就是什么日志,用户表一些东西

控制台

看源码这一部分

可以看见这就是一个典型的web项目,这里的就是登陆接口,和前端代码

自己配置ip端口号

这里启动可以是本地jar,也可以是用docker

启动之后的控制台如下

控制台主要内容就是任务管理和执行器管理

执行器管理:

个人理解就是xxl-job注册的服务器,看那些任务用哪台服务器执行

任务管理:

配置定时任务

控制台的主要功能在文档中写得很清楚这里就不再赘述。

任务调度

这里代码就给了我们一个示例

实际情况我们应该重新创一个项目,相当于前端控制台是一个服务,后端任务调度是一个服务

创建任务调度服务

基础文件直接照搬xxl-job中的示例就行

主要的配置

@XxlJob代表创建的定时调度对象,后续会在控制台注册,定时执行的程序就需要用到dubbo远程调度其他服务

java 复制代码
@Component
public class EquipmentCalibrationCreatHandler {

    @DubboReference(validation = "false",retries = 2)
    private EquipmentRpcService equipmentRpcService;

    private static final Logger logger = LoggerFactory.getLogger(EquipmentCalibrationCreatHandler.class);

    @XxlJob("equipmentCalibrationCreatHandler")
    public ReturnT<String> equipmentCalibrationCreatHandler(String param){
        XxlJobHelper.log("equipmentCalibrationCreatHandler start........");
        try {
            equipmentRpcService.handleEquipmentCalibration();
        }catch (Exception e){
            XxlJobHelper.log("equipmentCalibrationCreatHandler error........");
            XxlJobHelper.log(e);
            logger.error(e.getMessage());
            return ReturnT.FAIL;
        }
        XxlJobHelper.log("equipmentCalibrationCreatHandler end........");
        return ReturnT.SUCCESS;
    }


}

配置完后绑定执行器

打开控制台-》任务管理:新增任务

完成!

相关推荐
码农周6 分钟前
告别大体积PDF!基于PDFBox的Java压缩工具
java·spring boot
devilnumber15 分钟前
java中Redisson ,jedis,Lettuce和Spring Data Redis的四种深度对比和优缺点详解
java·redis·spring
摇滚侠16 分钟前
Java 进阶教程,全面剖析 Java 多线程编程
java·开发语言
yaaakaaang17 分钟前
十四、命令模式
java·命令模式
小锋java123434 分钟前
【技术专题】Matplotlib3 Python 数据可视化 - Matplotlib3 绘制饼状图(Pie)
java
wuminyu35 分钟前
专家视角看JVM_StartThread
java·linux·c语言·jvm·c++
awljwlj41 分钟前
黑马点评复习—缓存相关【包含可能的问题和基础知识复习】
java·后端·spring·缓存
Gofarlic_OMS42 分钟前
ENOVIA基于Token的许可证消费模式分析与分点策略
java·大数据·开发语言·人工智能·制造
ROLL.71 小时前
Git和Repo
java·git·安卓
小雅痞1 小时前
[Java][Leetcode simple] 1. 两数之和
java·算法·leetcode