xxl-job(分布式调度任务)

简介

针对分布式任务调度的需求,市场上出现了很多的产品:
1)TBSchedule:淘宝推出的一款非常优秀的高性能分布式调度框架,目前被应用于阿里,京东,支付宝,国美等很多互联网企业的流程调度系统中。但是已经多年未更新,文档缺失严重,缺少维护。
2)xxl-job:大众点评的分布式任务调度平台,是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
3) Elastic-job:当当网借鉴TBSchedule并基于quartz二次开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,具有任务高可用以及分片功能。
4)Saturn:唯品会开源的一个分布式任务调度平台,基于Elastic-job,可以全域统一监控,具有任务高可用以及分片功能。
xxl-job是一个分布式任务调度平台,其核心设计目标是开发迅速,学习简单,轻最级,易扩展。现已开放源代码,并接入多家公司线上产品线,开箱即用。
源码地址
文档地址
image.png

特性

  • 简单灵活
    提供web页面对任务进行管理,管理系统支持用户管理,权限控制;
    支持容器部署;
    支持通过通用http提供跨平台任务调度;
  • 丰富的任务管理功能
    支持页面对任务crud操作;
    支持在页面编写脚本任务,命令行任务,java代码任务并执行;
    支持任务级联编排,父任务执行结束后触发子任务执行;
    支持设置指定任务执行节点路由策略,包括轮询,随机,广播,故障转移,忙碌转移等;
    支持cron方式,任务依赖,调度中心api接口方式触发任务执行
  • 高性能
    任务调度流程全异步化设计实现,如异步调度,异步运行,异步回调等,有效对密集调度进行流行削峰;
  • 高可用
    任务调度中心,任务执行节点均集群部署,支持动态扩展,故障转移
    支持任务配置路由故障转移策略,执行器节点不可用是自动转移到其他节点执行
    支持任务超时控制,失败重试配置
    支持任务处理阻塞策路:调度当任务执行节点忙碌时来不及执行任务的处理策略,包括:串行,抛弃,覆盖策略
  • 易于监控运维
    支持设置任务失败邮件告警,预留接口支持短信,钉钉告警;
    支持实时查看任务执行运行数据统计图表,任务进度监控数据,任务完整执行日志;

快速入门

image.png

  • 调度中心:负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。
  • 任务执行器:负责接收调度请求并执行任务逻辑
  • 任务:专注于任务的处理。
  • 调度中心会发出调度请求,任务执行副接收到请求之后会去执行任务,任务则专注于任务业务的处理。

环境搭建

调度中心环境要求
  • Maven 3+
  • jdk1.8+
  • MySQL 5.7+
源码仓库地址
  • GitHub - xuxueli/xxl-job: A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)
  • 许雪里/xxl-job
初始化调度数据库

执行这个sql文件
image.png
建完后的表:
image.png
表解释:

  • xxl_job_lock:任务调度锁表;
  • xxl_job_group:执行器信息表,维护任务执行器信息;
  • xxl_job_info:调度扩展信息表:用于保存xxl-job调度任务的扩展信息,如任务分组,任务名,
  • 器地址,执行器,执行入参和报警邮件等等;
  • xxl_job_log:调度日志表:用于保存xxl-job任务调度的历史信息,如调度结果,调度机器和执行器等等;
  • xxl-job_logglue:任务GLUE日志:用于保存GLUE更新历史,用于支持GLUE的版本回溯功能;
  • xxl_job_registry:执行器注册表,维护在线的执行器和调度中心机器地址信息;
  • xxl_job_user:系统用户表;

调度中心支持集群部署,集群情况下各节点务必连接同一个mysdl实例;
如果mysql做主从,调度中心集群节点务必强制走主库;

编译源码

解压源码,按照Maven格式导入IDE,使用Maven编译即可。
image.png
修改配置为自己的:admin项目application.propertiesimage.png
启动admin项目,如果出现报错,则解决对应的报错即可。
登录xxl-job 的admin控制台
image.png
默认账密:
账号:admin
密码:123456

进入首页

image.png
也可以使用package去打包为jar包,然后通过java -jar xxl-job-admin.jar的方式去启动

创建执行器和任务

执行器中可以有具体的任务去执行。
执行器负责接收调度中心的调度并去执行里面的任务。

创建执行器

image.png
自动注册:调度中心会通过底层注册表去自动发现机器的地址。
创建执行器后,要在当前执行下指定具体的任务。

新增任务

image.png
路由策略:
image.png
阻塞处理策略:调度过于密集,执行器没资源去处理当下的请求,咋整?
image.png
JobHandler:用来关联后台的java代码

SpringBoot集成

可以直接使用这个项目,也可以自己单独创建一个SpringBoot项目。
image.png
先安装到本地,后续要依赖这个包
image.png
新建一个SpringBoot项目:xxl-job-core的版本可以看示例代码中的core版本
image.png
application的配置文件可以直接参考
image.png
执行器名称需要修改为之前我们自己创建的执行器
image.png
port在集群模式下需要注意,不要重复。
核心配置:
image.png
可以参考,xxl-job的代码示例:

package com.itheima.xxl.job.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** @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;}/*** 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;**      1、引入依赖:*          <dependency>*             <groupId>org.springframework.cloud</groupId>*             <artifactId>spring-cloud-commons</artifactId>*             <version>${version}</version>*         </dependency>**      2、配置文件,或者容器启动变量*          spring.cloud.inetutils.preferred-networks: 'xxx.xxx.xxx.'**      3、获取IP*          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();*/}

JobHandler中的名称写到XxlJob中注解的value位置,否则找不到这个任务。
image.png

application配置文件
# web port
server.port=8088
# no web
#spring.main.web-environment=false# log config
logging.config=classpath:logback.xml### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8888/xxl-job-admin### xxl-job, access token
xxl.job.accessToken=### xxl-job executor appname
xxl.job.executor.appname=	task-demo
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
### xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port= 9999
### xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30

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

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

相关文章

【深度学习】Adversarial Diffusion Distillation,SDXL-Turbo 一步出图

代码&#xff1a; https://huggingface.co/stabilityai/sdxl-turbo 使用 SDXL-Turbo 是SDXL 1.0的精炼版本&#xff0c;经过实时合成训练。SDXL-Turbo 基于一种称为对抗扩散蒸馏 (ADD) 的新颖训练方法&#xff08;请参阅技术报告&#xff09;&#xff0c;该方法允许在高图像质…

GPT实现开放式世界游戏实践【生化危机】

最近开始研究如何基于GPT构建一个游戏引擎&#xff0c;于是先从简单的文字游戏开始探索。 从最简单的选择机制、故事机制&#xff0c;完善成一个包括天气、事件、技能、属性、伙伴、建造系统的-生化危机版文字游戏-。 我唯一的体验是&#xff1a;AI游戏&#xff0c;大有可为! …

Linux socket编程(9):IO复用之poll和epoll详解

在之前的文章中&#xff0c;我们学习了IO复用模型之select原理及例子&#xff0c;但是select有监听描述符个数的限制&#xff0c;而且select的效率并不高&#xff0c;所以这篇文章就来学习效率更高的poll和Linux特有的epoll方法。 文章目录 1 select/poll/epoll对比2 poll2.1 p…

《小满生活》连续8天收视破2,生活剧怎么拍才好看?

拍生活剧从不失手的导演汪俊回归统治区&#xff0c;新剧《小满生活》以连续8天收视率破2的骄人成绩笑傲国产剧市场。 ​秦昊、蒋欣主演的《小满生活》是“小系列”的第四部作品&#xff0c;聚焦都市中年夫妻为了二胎换新房的社会问题&#xff0c;这次没有和老搭档黄磊合作&…

Day49力扣打卡

打卡记录 需要添加的硬币的最小数量&#xff08;归纳法&#xff09; 链接 按着已经加入的数&#xff0c;以此偏移对应距离&#xff0c;从而得到新的连续数&#xff0c;若是出现断层则计入最小次数中&#xff0c;再以此偏移对应距离。 class Solution:def minimumAddedCoins(s…

国际语音通知系统有哪些优点?国际语音通知系统有哪些应用场景?

国际语音通知是一种全球性的通信工具&#xff0c;它通过语音方式向用户发送各种重要信息和提示。无论是快递到货的取件提醒、机场航班的延误通知&#xff0c;还是银行账户的余额提醒&#xff0c;国际语音通知都能准确、迅速地将信息传达给用户。 三、国际语音通知系统有哪些优…

排序算法介绍(二)冒泡排序

0. 简介 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数列已经排…

unordered_map与unordered_set的实现(含迭代器)

unordered_map与unordered_set的实现 文章目录 unordered_map与unordered_set的实现前言一、问题一HashTable.h 二、问题二&问题三1.封装时如何取出key2.不同类型key如何建立对应关系 三、问题四&问题五问题四问题五 四、实现代码MyUnorderedSet.hMyUnorderedMap.hHash…

WebGL笔记:矩阵缩放的数学原理和实现

矩阵缩放的数学原理 和平移一样&#xff0c;以同样的原理&#xff0c;也可以理解缩放矩阵让向量OA基于原点进行缩放 x方向上缩放&#xff1a;sxy方向上缩放&#xff1a;syz方向上缩放&#xff1a;sz 最终得到向量OB 矩阵缩放的应用 比如我要让顶点在x轴向缩放2&#xff0c;y轴…

python爬虫AES魔改案例:某音乐素材下载网

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、找出需要加密的参数 js运行 atob(‘aHR0cHM6Ly93d3cuYWlnZWkuY29tL3NvdW5kL2NsYXNzLw’) 拿到网址&#xff0c;F12打开调…

html动漫网页设计分享 紫罗兰永恒花园网页作业成品带视频,注册登录,表格,表单

html5静态网页设计要是用HTML DIVCSS JS等来完成页面的排版设计,一般的网页作业需要融入以下知识点&#xff1a;div布局、浮动、定位、高级css、表格、表单及验证、js轮播图、音频 视频 Flash的应用、ul li、下拉导航栏、鼠标划过效果等知识点&#xff0c;学生网页作业源码可以…

数据挖掘实战-基于word2vec的短文本情感分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

鸿蒙基础入门与高频知识点梳理

介绍鸿蒙高频知识点&#xff0c;持续更新中 一、鸿蒙代码结构 ├──entry/src/main/ets // 代码区 │ ├──common │ │ └──Constant.ets // 常量类 │ ├──entryability │ │ └──EntryAbility.ts // 程序入口类 │ ├──p…

【算法】单调队列 滑动窗口最大值

文章目录 例题——239. 滑动窗口最大值相关练习1438. 绝对差不超过限制的最长连续子数组解法1——两个单调队列分别维护最大值和最小值解法2——有序集合TreeMap 2398. 预算内的最多机器人数目解法1——二分答案 单调队列解法2——双指针 单调队列 &#xff08;不固定大小的滑…

并发编程1:线程的基本概念

一、进程、线程、用户线程&原生线程、优先级、守护线程 什么是进程 是程序一次执行的过程&#xff0c;是系统运行程序的基本单位。系统运行一次程序&#xff0c;就是一个进程从创建到关闭的过程。Java 项目从 main 方法启动&#xff0c;就是启动了一个 JVM 进程&#xff…

C++面试宝典第1题:爬楼梯

题目 小乐爬楼梯&#xff0c;一次只能上1级或者2级台阶。楼梯一共有n级台阶&#xff0c;请问总共有多少种方法可以爬上楼&#xff1f; 解析 这道题虽然是一道编程题&#xff0c;但实际上更是一道数学题&#xff0c;着重考察应聘者的逻辑思维能力和分析解决问题的能力。 当楼梯只…

理解Zookeper

一、什么是Zookeper Zookeper是一个可以作为注册中心、配置中心、分布式锁的分布式解决方案 二、数据一致性 一致性分为强一致性、弱一致性、最终一致性 Zookeper可以保持数据的强一致性&#xff08;CP&#xff09; 主要是解决写、集群节点的同步、读之间的关系 强一致性&a…

nodejs微信小程序+python+PHP问卷调查系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

This详细用法

this的指向 this有5种指向&#xff0c;在普通函数中&#xff0c;this指向window&#xff1b;在构造函数中&#xff0c;this指向创建的对象&#xff1b;在方法声明中&#xff0c;this指向调用者&#xff1b;在定时器中&#xff0c; this指向window&#xff1b;在事件中&#xff…

超大规模集成电路设计----MOS器件原理(二)

本文仅供学习&#xff0c;不作任何商业用途&#xff0c;严禁转载。绝大部分资料来自----数字集成电路——电路、系统与设计(第二版)及中国科学院段成华教授PPT 超大规模集成电路设计----MOS器件原理&#xff08;二&#xff09; 半导体物理知识补充介绍1. 半导体材料2. 固体类型…