分布式任务调度:XXL-Job入门介绍实战

1. 引言

随着互联网业务的不断扩展和复杂化,分布式任务调度成为了构建大规模系统的重要组成部分。XXL-Job作为一款开源的分布式任务调度平台,提供了完整的任务调度和管理功能,被广泛应用于各种场景。本文将介绍如何入门使用XXL-Job,通过实战演示帮助读者快速上手分布式任务调度。

官网:分布式任务调度平台XXL-JOB 

2. Xxl-job介绍

XXL-Job 是一款开源的分布式任务调度平台,由阿里巴巴开发团队提供支持。它提供了完整的任务调度和管理功能,能够帮助用户实现分布式环境下的任务调度、执行和监控。XXL-Job具有轻量、易用、稳定的特点,广泛应用于各种业务场景。

2.1 主要特性
  • 任务管理: 支持任务的新增、编辑、暂停、恢复、删除等操作,提供了丰富的任务管理功能。
  • 分布式执行: 支持分布式部署,任务执行器可以部署在不同的节点上,实现任务的分布式执行。
  • 调度监控: 提供了任务执行情况的监控和统计功能,包括任务执行次数、执行状态、执行日志等信息。
  • 动态调度: 支持任务的动态调度和执行,可以根据实际业务需求灵活调整任务的执行策略和执行时间。
  • 报警机制: 支持任务执行异常时的报警机制,可配置报警方式和报警接收人,及时发现和处理任务执行异常情况。
  • 任务分片: 支持将任务分片执行,提高任务执行效率,同时支持分片广播,确保任务的执行顺序和一致性。
  • 扩展性: 支持自定义任务执行器和调度策略,可以根据业务需求进行灵活扩展和定制。
2.2 架构设计

XXL-Job的架构设计主要包括调度中心、执行器、数据库、消息队列等组件。调度中心负责任务的调度和管理,执行器负责接收调度中心分配的任务并执行,数据库用于存储任务信息和调度规则,消息队列用于调度中心和执行器之间的通信。

引用自官网的架构图

2.3 应用场景

XXL-Job广泛应用于各种业务场景,包括但不限于数据处理和计算任务调度、定时任务调度、异步任务调度、实时任务调度等。它能够帮助用户实现任务的统一调度和管理,提高系统的稳定性和可靠性。

3. 快速开始

3.1 下载安装

首先,从XXL-Job的官方网站下载最新版本的发布包,并解压到本地目录。这里演示以源码的方式启动,其他方式可以参考官网文档:

github:GitHub - xuxueli/xxl-job at 2.4.0

3.2 配置数据库

将db目录下的sql文件在mysql里执行初始化xxl所需的表,进入解压后的xxl-job-admin工程,编辑application.properties文件,配置数据库连接信息。

3.3 启动服务

xxl-job-admin目录下执行以下命令启动XXL-Job Admin服务:

4. 创建任务

4.1 登录管理界面

打开浏览器,访问http://localhost:8080/xxl-job-admin,使用默认的管理员账号和密码admin/123456登录。

4.2 新增执行器

在页面上的执行器管理新增,填写AppName,就是代码里定义的

xxl.job.executor.appname=xxl-job-executor-sample

4.3 新增任务

在左侧菜单栏选择“调度中心” -> “任务管理”,点击“新增”按钮,填写任务名称、执行器、执行方式等信息。

其中执行器是自动注册好的,可以在页面上查看执行器的地址(远程调用),JobHandler就是代码中定义的@Xxl-job注解定义的值

5. SpringBoot集成

源码里有springboot集成的demo,下面是截图,其中XxlJobConfig.java是核心类,如果缺少这个,执行器是无法注册到xxl-job上的。


import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** xxl-job config** @author xuxueli 2017-04-28*/
@Configuration
public class XxlJobConfig {private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);@Value("${xxl.job.admin.addresses}")private String adminAddresses;@Value("${xxl.job.accessToken}")private String accessToken;@Value("${xxl.job.executor.appname}")private String appname;@Value("${xxl.job.executor.address}")private String address;@Value("${xxl.job.executor.ip}")private String ip;@Value("${xxl.job.executor.port}")private int port;@Value("${xxl.job.executor.logpath}")private String logPath;@Value("${xxl.job.executor.logretentiondays}")private int logRetentionDays;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {logger.info(">>>>>>>>>>> xxl-job config init.");XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appname);xxlJobSpringExecutor.setAddress(address);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;}
}
5.1 创建执行任务

在项目中创建一个实现IJobHandler接口的执行器类,实现execute方法,编写任务逻辑代码。

@Component
public class SampleXxlJob {private static Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);/*** 1、简单任务示例(Bean模式)*/@XxlJob("demoJobHandler")public void demoJobHandler() throws Exception {XxlJobHelper.log("XXL-JOB, Hello World.");for (int i = 0; i < 5; i++) {XxlJobHelper.log("beat at:" + i);TimeUnit.SECONDS.sleep(2);}// default success}
}

6. 启动任务

在任务管理界面中选择刚刚创建的任务,点击“启动”按钮,启动配置好的任务。也可以执行一次,可以看到已经调用到本地的任务代码里了。

  
6.1 查看调度日志

7. 总结

通过本文的介绍和实战演示,读者可以快速了解并上手使用 XXL-Job 进行任务调度管理。XXL-Job 提供了简单易用的界面和丰富的功能,能够满足各种任务调度需求,是一款值得推荐的分布式任务调度平台。


更多文章

RabbitMQ入门实战-CSDN博客

presto/trino 入门介绍实战_presto和trino怎么选-CSDN博客

MongoDB入门介绍与实战-CSDN博客

Netty入门与实战教程_netty教程-CSDN博客

Nacos入门介绍与使用_怎么找到nacos的控制台-CSDN博客

ElasticSearch入门介绍和实战-CSDN博客

JMM内存屏障和逃逸分析详解-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/719863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python解释器及PyCharm安装教程

PyCharm官方下载地址☞https://www.jetbrains.com/pycharm/download/?sectionwindows Python解释器官方下载地址☞ https://www.python.org/downloads/windows/

牛客小白月赛60 C 小竹关禁闭(动态规划 01背包)

题目描述 妈妈成功将小竹救了出来&#xff0c;她觉得小竹实在是太笨了&#xff0c;决定关小竹一周禁闭。可是小竹哪里能忍受失去自由&#xff0c;他早就偷藏了一部手机用于联系你&#xff0c;请求你帮助他逃离。 你通过观察发现他房间内有 n n n 个可用于制成绳子的物品&…

数学建模【灰色关联分析】

一、灰色关联分析简介 一般的抽象系统,如社会系统、经济系统、农业系统、生态系统、教育系统等都包含有许多种因素&#xff0c;多种因素共同作用的结果决定了该系统的发展态势。人们常常希望知道在众多的因素中&#xff0c;哪些是主要因素&#xff0c;哪些是次要因素;哪些因素…

Android各版本差异性

Android各版本差异性 Android 6&#xff08;api 23&#xff09; 指纹识别 运行时权限&#xff1a;动态申请&#xff08;重点&#xff09; 移除对Apache HTTP client的支持&#xff0c;建议使用HttpURLConnection。 休眠和应用待机模式&#xff08;Doze and App Standby&…

web学习笔记(二十三)

目录 1.增加节点 1.1document.write 1.2innerHTML 1.3动态添加 1.4追加和插入节点 2.删除、克隆、替换节点 2.1删除节点 2.2克隆节点 2.3替换节点 3.事件 3.1什么是事件 3.2事件三要素 3.3事件的种类 3.4常见事件名称&#xff08;类型&#xff09;汇总 4.操作…

代码随想录算法训练营第三十四天| 860.柠檬水找零, 406.根据身高重建队列 ,452. 用最少数量的箭引爆气球

860.柠檬水找零 - LeetCode 思路&#xff1a; 这个问题比较简单&#xff0c; 用一个字典bill_dict记录已经收到的钱已经钱的数量&#xff0c; 然后如果收到五元&#xff0c; 字典中的 bill_dict[5] 1。 收到10元 bill_dict[5] - 1 bill_dict[10] 1 。 麻烦的是收到20元&…

图像剪辑|Linux|ImageMagick的初步使用--素描,毛玻璃等特效

前言&#xff1a; ImageMagick在图像剪辑领域的地位基本等同于FFmpeg&#xff0c;和FFmpeg基本一样&#xff0c;在Linux下使用此工具的原因是该工具可以使用shell脚本批量剪辑&#xff0c;在Windows下就会比较麻烦一些了 那么&#xff0c;本文主要是记录一下ImageMagick的一些…

论文阅读:基于超像素的图卷积语义分割(图结构数据)

#Superpixel-based Graph Convolutional Network for Semantic Segmentation github链接 引言 GNN模型根据节点特征周围的边来训练节点特征&#xff0c;并获得最终的节点嵌入。通过利用具有不同滤波核的二维卷积对来自附近节点的信息进行整合&#xff0c;给定超像素方法生成的…

汽车上的各种质量:整备质量、总质量、装载质量、簧上质量

文章目录 前言一、整备质量二、额定总质量三、额定装载质量四、簧上质量 总结 前言 一、整备质量 整备质量指的是汽车按照出厂技术条件完全配备&#xff08;包括备胎、工具、各种油水等&#xff09;的质量。汽车的整备质量也就是人们常说的一辆汽车的自重&#xff0c;它的规范…

MATLAB--pie函数绘制复杂分类饼图(2)--附案例代码

MATLAB–pie函数绘制复杂分类数据的饼状图 目录 MATLAB--pie函数绘制复杂分类数据的饼状图摘要1. 问题描述2. 具体步骤&#xff1a;3. 绘制结果4. 小结 摘要 在数据可视化中&#xff0c;饼状图是一种常用的展示分类数据的方式。之前&#xff0c;文章介绍了使用MATLAB绘制饼状图…

数据删除

目录 数据删除 删除员工编号为 7369 的员工信息 删除若干个数据 删除公司中工资最高的员工 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 数据删除 删除数据就是指删除不再需要的数据 delete from 表名称 [where 删…

群晖Synology Drive服务搭建结合内网穿透实现云同步Obsidian笔记文件夹

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-ebec69DBjtGk7apF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

C++字典操作

创建字典 #include<iostream> #include<map> #include<string>using namespace std;int main(){map<string, int> mymap;}赋值 2.1 指定元素赋值 mymap["abc"] 1;2.2 添加键值对 mymap.insert(make_pair("bcd", 2));字典的顺序…

后端传给前端的时间字段前端显示不正确

具体问题是什么呢&#xff0c;就比如我后段有一个字段是TimeStamp类型&#xff0c;从数据库中查出数据是下面的样式&#xff1a; 但是前端显示的是下面的格式&#xff1a; 这个的解决方法还是挺多的&#xff0c;那接下来具体来看看吧~ 第一种&#xff1a; 在application.prop…

Linux使用bcache 将SSD加速硬盘

前言 在Linux下&#xff0c;使用SSD为HDD加速&#xff0c;目前较为成熟的方案有&#xff1a;flashcache&#xff0c;enhanceIO&#xff0c;dm-cache&#xff0c;bcache等&#xff0c;多方面比较以后最终选择了bcache。 bcache 是一个 Linux 内核块层超速缓存。它允许使用一个或…

Flink 面试题总结及答案

基础 state的分类 key state和operate state state 的重分布 Flink状态管理详解&#xff1a;Keyed State和Operator List State深度解析 - 掘金 checkpoint 和save point https://zhuanlan.zhihu.com/p/79526638 flink job 的容错策略 如果在没有持续消息输出的情况下&…

19.AUTOSAR MCAL分析(一):Microcontroller Driver

目录 1. MCAL概述 2. Microcontroller Drivers 2.1 MCU Drivers 2.2 GPT Driver 2.3 WatchDog Driver 2.4 CoreTest 3.小结 <

【短时交通流量预测】基于单层BP神经网络

课题名称&#xff1a;基于单层BP神经网络的短时交通流量预测 版本时间&#xff1a;2023-04-27 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型简介&#xff1a; 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&…

Android 自定义组件

在 Android 开发中&#xff0c;有时我们需要创建自定义的 UI 组件以满足特定的需求&#xff0c;这就是 Android 自定义组件的用途。在这篇博客中&#xff0c;我们将介绍如何创建和使用自定义组件&#xff0c;并以一个标题栏组件为例进行说明。 什么是自定义组件&#xff1f; …

【CSP试题回顾】201312-3-最大的矩形

CSP-201312-3-最大的矩形 解题思路 1. 遍历所有可能的矩形高度&#xff1a; 通过遍历所有矩形高度来找到最大的矩形&#xff0c;即对每个可能的高度 it&#xff08;从直方图中的最小高度到最大高度 heightMax&#xff09;&#xff0c;代码将尝试找到在这个高度或以上的最长连…