xxl-job Study Notes

news2024/10/9 10:20:52

文章目录

  • 1 xxl-job 快速入门
    • 1.1 xxl-job是什么
    • 1.2 为什么需要xxl-job
      • 1.2.1 定时任务
      • 1.2.2 分布式任务调度
      • 1.2.3 分布式任务调度特点
    • 1.3 xxl-job简介
    • 1.4 部署安装——基于docker
    • 1.5 xxl-job表介绍
    • 1.5 编写任务代码
      • 1.5.1 xxl-job配置
      • 1.5.2 任务代码
      • 1.5.3 分布式任务测试
        • 1.5.3.1 先把本地服务器跑起来
        • 1.5.3.2 新增执行器管理
        • 1.5.3.3 新增任务管理
        • 1.5.3.4 启动任务
        • 1.5.3.5 执行任务
    • 1.6 调度流程
      • 1.6.1 任务调度时序图
      • 1.6.2 任务调度原理

1 xxl-job 快速入门

1.1 xxl-job是什么

xxl-job的功能可以联系Spring Task定时任务处理,其不同点在Spring Task不适于分布式中,而xxl-job适用于分布式系统中。

1.2 为什么需要xxl-job

一般在项目中实现定时任务主要有两种技术方案,分别是Spring Task和xxl-job,其中Spring Task适合单体项目,而xxl-job适合与分布式任务调度框架,更适合于在分布式项目中使用。

1.2.1 定时任务

在某一时间段,或者某一时间点定时处理某一任务。

1.2.2 分布式任务调度

分布式任务调度介绍:在微服务架构体系中,服务间通过网络交互来完成业务,在分布式框架下,一个服务需要部署多个实例来确保业务的可靠运行,在这种分布式环境下运行任务调度,称之为分布式任务调度。
在这里插入图片描述

1.2.3 分布式任务调度特点

特点说明
并行任务调度集群部署单个服务, 这样就可以使多台计算机共同去完成任务调度,将任务(方法)分割成若干分片,交由不同实例并行执行,以提高任务调度的处理效率
高可用若某一个实例宕机,不影响其他实例来执行任务。
弹性扩容当集群中增加实例就可以提高执行任务效率。
任务管理与监测① 对系统中存在的所有定时任务进行统一管理与监测。②让开发人员能时刻了解任务执行情况,从而做出快速处理响应。

1.3 xxl-job简介

XXL-JOB:其是一个分布式调度平台,设计目的:开发迅速、学习简单、开箱即用。
官方网址:https://www.xuxueli.com/xxl-job/

官方架构图:
在这里插入图片描述

1.4 部署安装——基于docker

docker run \
-e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.150.101:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 \
--spring.datasource.username=root \
--spring.datasource.password=123" \
--restart=always \
-p 28080:8080 \
-v xxl-job-admin-applogs:/data/applogs \
--name xxl-job-admin \
-d \
xuxueli/xxl-job-admin:2.3.0
  • 默认端口映射到28080
  • 日志挂载到/var/lib/docker/volumes/xxl-job-admin-applogs
  • 数据库脚本:https://gitee.com/xuxueli0323/xxl-job/blob/2.3.0/doc/db/tables_xxl_job.sql

1.5 xxl-job表介绍

在这里插入图片描述

说明
xxl_job_lock任务调度锁表。
xxl_job_group执行器信息表,维护任务执行器信息。
xxl_job_info调度扩展信息表:用于保存XXL-JOB调度任务调度信息,如:任务分组、任务名、机器地址、执行器、执行入参、报警邮键等。
xxl_job_log调度日志表:用于保存XXL-JOB任务调度历史信息,如:调度任务、执行结果、调度入参等。
xxl_job_log_report调度日志报表:用于存储XXL-JOB任务调度日志的报表,用于调度中心报表功能页面。
xxl_job_logglue任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能。
xxl_job_registry执行器注册器,维护在线执行器和调度中心机器地址信息。
xxl_job_user系统用户表。

1.5 编写任务代码

1.5.1 xxl-job配置

package com.sl.xxljob.config;

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
*/
@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:0}")
		private int port;

		@Value("${xxl.job.executor.logpath:}")
		private String logPath;

		@Value("${xxl.job.executor.logretentiondays:}")
		private int logRetentionDays;


		@Bean
		public 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;
		}
	}

1.5.2 任务代码

package com.sl.xxljob.job;

import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

/**
 * 任务处理器
 */
@Component
public class JobHandler {

    private List<Integer> dataList = Arrays.asList(1, 2, 3, 4, 5);

    /**
     * 普通任务
     */
    @XxlJob("firstJob")
    public void firstJob() throws Exception {
        System.out.println("firstJob执行了.... " + LocalDateTime.now());
        for (Integer data : dataList) {
            XxlJobHelper.log("data= {}", data);
            Thread.sleep(RandomUtil.randomInt(100, 500));
        }
        System.out.println("firstJob执行结束了.... " + LocalDateTime.now());
    }

    /**
     * 分片式任务
     */
    @XxlJob("shardingJob")
    public void shardingJob() throws Exception {
        // 分片参数
        // 分片节点总数
        int shardTotal = XxlJobHelper.getShardTotal();
        // 当前节点下标,从0开始
        int shardIndex = XxlJobHelper.getShardIndex();

        System.out.println("shardingJob执行了.... " + LocalDateTime.now());
        for (Integer data : dataList) {
            if (data % shardTotal == shardIndex) {
                XxlJobHelper.log("data= {}", data);
                Thread.sleep(RandomUtil.randomInt(100, 500));
            }
        }
        System.out.println("shardingJob执行结束了.... " + LocalDateTime.now());
    }
}

1.5.3 分布式任务测试

1.5.3.1 先把本地服务器跑起来

在这里插入图片描述

1.5.3.2 新增执行器管理

在这里插入图片描述

1.5.3.3 新增任务管理

在这里插入图片描述

1.5.3.4 启动任务

在这里插入图片描述

1.5.3.5 执行任务

在这里插入图片描述

1.6 调度流程

1.6.1 任务调度时序图

在这里插入图片描述

1.6.2 任务调度原理

原理

  • ① 首先,用户在开发者服务器想要执行的方法上使用 @XxlJob(),标识此是一个调度任务及其任务名,随后启动服务器,服务器就会把自己注册到xxl-job调度中心。
  • ② 随后,用户在调度中心创建定时任务及其任务启动规则,并启动此调度任务后,调度中心就会向开发者服务器,发送http请求
  • ③ 其次,开发者服务器在接受到调度中心发送的http请求后,便会根据调度中心中用户设置的服务器名称(开发者服务器配置文件中已经配置)和JobHandle(被开发者服务器上用@XxlJob("shardingJob")声明的方法),执行响应任务。
  • ④然后,开发者服务器便会通过http请求向调度中心反馈任务执行结果,调度中心再接收到反馈后,便会记录日志,以便与用户查看日志。

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

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

相关文章

计算机系统2022期末

计算机系统2022期末 本课程的复习请以知识点复习为重&#xff0c;全部内容共有大小280个知识点&#xff0c;都可能在期末考试出现&#xff0c;仅通过往年试卷复习是远远不够的&#xff0c;往年试卷仅能作为部分知识点的检测以及题目类型的大致参考&#xff0c;复习本课程需要尽…

对球面线性插值的理解

【前言】 线性插值是点A到点B间距离的均匀变化&#xff0c;球面线性插值是点A到点B的角度均匀变化&#xff0c;前者应用范围很广&#xff0c;后者主要应用平滑旋转 【球面线性插值求解】 球面线性插值&#xff08;Spherical linear interpolation&#xff0c;Slerp&#xff…

权限系统设计方案

1 为什么需要权限管理 日常工作中权限的问题时时刻刻伴随着我们&#xff0c;程序员新入职一家公司需要找人开通各种权限&#xff0c;比如网络连接的权限、编码下载提交的权限、监控平台登录的权限、运营平台查数据的权限等等。 在很多时候我们会觉得这么多繁杂的申请给工作带…

知识变现海哥:知识博主私域卖课三大途径

哈喽&#xff0c;大家好&#xff0c;我是海哥&#xff0c;知识付费变现创业教练&#xff0c;教育公司培训总监&#xff0c;从事知识付费变现咨询10年&#xff0c;已助力3000人实现知识付费变现。 私域这里主要指的就是微信&#xff0c;这里跟大家介绍三种私域卖课的方式。 1 朋…

Nsis简单打包Unity window程序

制作步骤 1.Unity发布一个window exe程序 2. 创建一个脚本&#xff0c;Test.nsi&#xff0c;放置在发布文件中 3. 编写命令&#xff0c;使用Nsis进行编译运行(脚本拖拽到Nsis编译器中&#xff0c;自动运行) 4. 编译成功&#xff0c;发布文件夹内生成一个SetUp.exe安装程序 5.…

一文理解数据倾斜

什么是数据倾斜 并行处理数据集的某个task处理的数据明显多于其他task。 发生数据倾斜的原因 一个词概括:shuffle 在Shuffle的过程中,同样一个Key一般都会交给一个Task去处理,如果某个key特别多,如上图中task3的key有80亿,这样就会造成别的task很快算完,而task3却一直在…

项目管理专业人员能力评价等级证书(CSPM)是什么?

2021年10月&#xff0c;中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系&#xff0c;开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会&#xff08;CAS&#xff09;组织开展的项…

判断两个矩形是否相交(Rect Intersection)

0x00 Preface 最近在开发一个2D组态图形组件的过程中&#xff0c;里面的数学模块&#xff0c;涉及到两个矩形是否相交的判断。 这个问题很多年前就写过&#xff0c;算是个小的算法吧。 网络上搜索一下&#xff0c;有很多思路&#xff0c;有一些思路要基于多种组合的判断&…

618有哪些数码好物值得买?2023年618数码好物必买清单

618作为年中大促节点&#xff0c;很多的产品会迎来历史最低价&#xff0c;正是入手数码产品的最佳时间点。很多人在选择物品时难免会产生618有哪些数码好物值得买的疑惑?为此&#xff0c;我也整理了一份618数码好物清单&#xff0c;都是一些实用性很强的数码好物&#xff0c;希…

【2023年高考作文】七套卷子全汇总及AI一分钟版本作答

2023年高考作文-全国甲卷 科技与时间 当今社会&#xff0c;科技已经成为人们生活的必需品。它给我们带来了很多便利与机遇&#xff0c;让我们能够更好地掌控时间。然而&#xff0c;我们回顾一下自己的生活&#xff0c;会发现我们似乎已经依赖了科技&#xff0c;甚至成为了时间…

django-vue-admin开源项目环境调试(靠谱)

一、源码地址 注意&#xff0c;一定要使用这个地址。&#xff08;使用其他地址下载下来的感觉代码缺失&#xff0c;踩了大坑&#xff09; django-vue-admin: 基于RBAC模型的权限控制的一整套基础开发平台&#xff0c;前后端分离&#xff0c;后端采用 djangodjango-rest-frame…

消防应急照明和疏散指示系统在某洁净医药的设计与应用

【摘要】&#xff1a;A100型消防应急照明和疏散指示系统具有集中控制&#xff0c;灵活度高和可靠性强等特点。系统采用17寸工业平板电脑&#xff0c;采用Windonws7系统&#xff0c;可支持联动报警、系统监控、故障报警、自检、备电、记录存储与查询、导光流、权限控制等多项功能…

30、js - Promise

一、Promise的3种状态: 1、作用&#xff1a;了解Promise对象如何关联的处理函数&#xff0c;以及代码执行顺序 2、一个Promise对象&#xff0c;必然处于以下几个状态之一&#xff1a; pending&#xff1a;初始状态&#xff0c;页面一旦调用Promise对象&#xff0c;Promise对象就…

Hive中的DDL操作

文章目录 Hive中的DDL操作一、数据库&#xff08;database&#xff09;相关操作1. 创建数据库1&#xff09;语法2&#xff09;案例 2. 查询数据库1&#xff09;展示所有数据库2&#xff09;查看数据库信息 3. 修改数据库1&#xff09;语法2&#xff09;案例 4. 删除数据库1&…

需求三重境

需求的三点-痛点、痒点、爽点 我早前也做过产品经理&#xff0c;做产品经理经常需要分析需求&#xff0c;而KANO模型是其中的一个模型。如果要进一步解读痛点、痒点、爽点&#xff0c;或者可以尝试从KANO模型的角度分析。 所谓的KANO模型&#xff0c;是东京理工大学教授狩野纪…

接口测试 —— 接口和接口文档概念

1、接口的概念 接口又叫API&#xff0c;全称application programming interface&#xff1a;应用程序接口&#xff08;规范&#xff09;&#xff0c;也就是我们经常会听说Web接口&#xff0c;APP接口。 详细说明&#xff1a; APP是一种基于C/S架构的应用程序&#xff0c;如抖音…

阿里高工珍藏版“亿级高并发系统设计手册(2023版)”面面俱到,太全了

高并发 俗话说&#xff1a;罗马不是一天建成的&#xff0c;系统的设计当然也是如此。 从原来谁都不看好的淘宝到现在的电商巨头&#xff0c;展现的不仅仅是一家互联网巨头的兴起&#xff0c;也是国内互联网行业迎来井喷式发展的历程&#xff0c;网络信号从 2G 发展到现在的 5…

苹果服务端通知v2处理(AppStore Server Notifications V2)

苹果服务端通知v2处理 关键词: App Store Server Notifications V2、Python源码、苹果订阅、JWS、x5c、JSON WEB TOKEN 背景 最近要接入苹果订阅功能&#xff0c;调研后发现订阅生命周期内的状态变更是通过苹果服务端通知返回的(什么时候普通内购也能加上减少掉单的概率)&am…

邮件营销技巧!不想被打入冷宫?这五点让你的邮件不再进垃圾箱

邮件营销凭借其低成本、高效率的优势渐渐地在各个行业开始崭露头角。它既适用于外贸行业来拓展客户、又适用于金融行业来和客户保持联系。除此之外&#xff0c;企业还可以用邮件营销来通知活动信息、产品上新信息等等。 不过&#xff0c;很多人在进行邮件营销的时候经常会遇到“…

说点理论-什么叫TED背景

TED背景的概念 指technology, entertainment, design在英语中的缩写,即技术、娱乐、设计的3个首字母缩定。 TED背景的投影最小为4米*4米,大的有IMAX宽影幕布来打投影。给人感觉为:非常技术、非常高大上、非常专业、非常Fashion。 因此,头部一些公司会专门对于非常重要类…