阿里巴巴任务调度SchedulerX兼容XXL-JOB

简介: 阿里巴巴任务调度SchedulerX2.0兼容XXL-JOB任务接口,支持@XxlJob新注解和@JobHandler老注解方式,用户不需要修改一行代码,即可以将XXL-JOB任务在SchedulerX2.0平台上托管。

背景介绍

XXL-JOB是一个开箱即用的轻量级分布式任务调度系统,其核心设计目标是开发迅速、学习简单、轻量级、易扩展,在开源社区广泛流行,已在多家公司投入使用。


因为XXL-JOB开源协议是GPL,云厂商无法直接商业化托管该产品,各大中小企业需要自建,增加了学习成本、机器成本、人工运维成本。


阿里巴巴商业化任务调度平台SchedulerX2.0兼容XXL-JOB任务接口,支持@XxlJob新注解和@JobHandler老注解方式,用户不需要修改一行代码,即可以将XXL-JOB任务在SchedulerX2.0平台上托管。


托管XXL-JOB的优势

免运维、低成本

自建XXL-JOB至少需要2个server+1个数据库

托管XXL-JOB可以省去机器成本,省去人力运维成本


海量任务、精准调度

开源XXL-JOB基于竞争数据库锁保证只有一个节点执行任务,对于数据库有压力,据统计,当任务超过1万,都是分钟级别的任务时,就会有比较明显的调度延时,如果是秒级别任务,延时就更加明显。


SchedulerX2.0采用分布式架构,不同的server调度不同的任务,且无锁竞争,真正实现可以水平扩展,可以支持百万级别任务调度。针对秒级别任务低延时的特性,采用了专门的架构,占用资源极低,可以作为实时业务的秒级别调度场景。


另外,SchedulerX2.0还支持一次性任务,可以指定未来某个时刻执行一次任务,执行完任务自动销毁,可以作为定时通知、订单定时关闭等场景。


丰富的可视化

schedulerx拥有丰富的可视化能力,比如

  • 用户大盘

  • 查看任务历史执行记录

  • 查看任务运行日志

  • 查看任务运行堆栈

  • 查看任务操作记录


高级特性

  • 任务编排:支持工作流(DAG)进行任务编排,操作简单,前端直接单手操作拖拖拽拽即可。详细的任务状态图能一目了然看到下游任务为什么没跑。


  • 限流:常见场景是夜间离线报表业务,比如很多报表任务是晚上1、2点开始跑,要控制应用最大并发的任务数量(否则业务扛不住),达到并发上限的任务会在队列中等待。同时要求早上9点前必须把KPI报表跑出来,可以设置KPI任务高优先级,会抢占低优先级任务优先调度。

SchedulerX支持可抢占的任务优先级队列,只需要在控制台进行配置

  • 资源隔离:支持命名空间和应用级别资源隔离,支持多租户权限管理


企业级高可用

SchedulerX2.0采用高可用架构,任务多备份机制,经历阿里集团多年双十一、容灾演练,可以做到整个集群挂掉任意2个节点或者任意一个机房断电,任务调度都不会收到影响。


商业化报警运维

  • 报警:支持邮件、钉钉、短信、电话,其他报警方式在规划中。支持任务失败、超时、无可用机器报警。报警内容可以简单的看出任务失败的原因,以钉钉机器人为例

  • 运维操作:原地重跑、重刷数据、标记成功、查看堆栈、停止任务、指定机器等


与开源XXL-JOB区别

开源xxl-job

SchedulerX为底座的xxl-job任务

Bean模式

新版本@XxlJob注解,老版本@JobHandler注解,不兼容

同时兼容@XxlJob注解和@JobHandler注解

GLUE(JAVA)

支持

不支持(有计划)

Shell

支持

支持

Nodejs

支持

支持

http

不支持

支持

单机

支持

支持

分片广播

支持

支持

路由策略

第一个、最后一个、轮询、随机等

轮询

定时

cron

cron、fixed_rate、fixed_delay、one_time

工作流

不支持

支持

运维操作

运行一次

运行一次、原地重跑、重刷数据、标记成功、停止运行

报警

邮件

邮件、钉钉群、短信、电话


如何接入(有完整demo可供下载)

接入配置

将com.xuxueli:xxl-job-core的依赖去除,增加schedulerx客户端的依赖和com.aliyun:schedulerx2-plugin-xxljob这个插件,以schedulerx2-spring-boot-starter为例:


因为xxl-job在2.3.x版本重构了接口,请根据xxl-job版本选择不同的接入方式

  • 2.3.x版本接入,参考demo
<!-- 注释xxl-job-core --><!--<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>${project.parent.version}</version></dependency>--><dependency><groupId>com.aliyun.schedulerx</groupId><artifactId>schedulerx2-spring-boot-starter</artifactId><version>1.8.12</version></dependency><dependency><groupId>com.aliyun.schedulerx</groupId><artifactId>schedulerx2-plugin-xxljob</artifactId><version>2.3.1</version></dependency>
  • 2.3.0以下版本接入,参考demo
<!-- 注释xxl-job-core --><!--<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>${project.parent.version}</version></dependency>--><dependency><groupId>com.aliyun.schedulerx</groupId><artifactId>schedulerx2-spring-boot-starter</artifactId><version>1.8.12</version></dependency><dependency><groupId>com.aliyun.schedulerx</groupId><artifactId>schedulerx2-plugin-xxljob</artifactId><version>2.2.1</version></dependency>


application.properties增加配置

spring.schedulerx2.endpoint=xxxxxxx
spring.schedulerx2.namespace=xxxxxxx
spring.schedulerx2.groupId=xxxxxxxx
spring.schedulerx2.appKey=xxxxxxx


创建任务

@XxlJob方法注解

以xxl-job-2.2.1接口为例,参考开源xxl-job-executor-sample-springboot工程,新建方法任务


控制台新建任务


手动运行一次,可以打印任务参数


@JobHandler类注解

新建代码如下


控制台新建任务如下


成功打印任务参数:


分片广播

以XxlJob方法注解为例,新建代码如下


控制台新建任务


启动2个客户端实例,运行一次,分别打印


XXL-JOB批量迁移工具

导出xxl-job任务配置

  1. 下载工具,地址:https://schedulerx2.oss-cn-hangzhou.aliyuncs.com/tools/xxljob-export.tar.gz
  2. 解压工具包,在application.properties文件中进行导出配置

### xxl-job, datasource
datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai
datasource.username=root
datasource.password=123456
datasource.driver-class-name=com.mysql.cj.jdbc.Driver
### 配置对应要导出的app-name(该步骤可选,不设置的情况下导出所有任务分组)
#xxl-job.app-name=xxl-job-executor-sample
  1. 执行./start.sh命令运行导出操作

  1. 执行完成后,在当前目录下获得 "xxljob_*******.json"的任务配置文件(仅Bean模式的任务配置信息)

任务导入SchedulerX

  1. 进入SchedulerX控制台,进入“任务管理”菜单,选择“应用”->“导入任务”

  1. 选择上节中导出的任务配置文件执行导入,即可完成xxl-job任务配置信息至SchedulerX任务配置信息同步。


目录
相关文章
|
Java Nacos
对于Nacos 2.x版本,默认是通过gRPC协议进行通信的
对于Nacos 2.x版本,默认是通过gRPC协议进行通信的
1521 7
|
NoSQL IDE 网络协议
Redis高级客户端Lettuce详解(下)
Lettuce是一个Redis的Java驱动包,初识她的时候是使用RedisTemplate的时候遇到点问题Debug到底层的一些源码,发现spring-data-redis的驱动包在某个版本之后替换为Lettuce。既然能被Spring生态所认可,Lettuce想必有过人之处,于是笔者花时间阅读她的官方文档,整理测试示例,写下这篇文章。
5710 0
|
分布式计算 并行计算 数据库
Schedulerx2.0分布式计算原理&最佳实践
1. 前言 Schedulerx2.0的客户端提供分布式执行、多种任务类型、统一日志等框架,用户只要依赖schedulerx-worker这个jar包,通过schedulerx2.0提供的编程模型,简单几行代码就能实现一套高可靠可运维的分布式执行引擎。
26706 2
|
10月前
|
存储 Prometheus Cloud Native
分布式系统架构6:链路追踪
本文深入探讨了分布式系统中的链路追踪理论,涵盖追踪与跨度的概念、追踪系统的模块划分及数据收集的三种方式。链路追踪旨在解决复杂分布式系统中请求流转路径不清晰的问题,帮助快速定位故障和性能瓶颈。文中介绍了基于日志、服务探针和边车代理的数据收集方法,并简述了OpenTracing、OpenCensus和OpenTelemetry等链路追踪协议的发展历程及其特点。通过理解这些概念,可以更好地掌握开源链路追踪框架的使用。
1054 41
|
11月前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
8647 2
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
|
10月前
|
SQL JavaScript Java
Spring Boot 3 整合 Mybatis-Plus 实现数据权限控制
本文介绍了如何在Spring Boot 3中整合MyBatis-Plus实现数据权限控制,通过使用MyBatis-Plus提供的`DataPermissionInterceptor`插件,在不破坏原有代码结构的基础上实现了细粒度的数据访问控制。文中详细描述了自定义注解`DataScope`的使用方法、`DataPermissionHandler`的具体实现逻辑,以及根据用户的不同角色和部门动态添加SQL片段来限制查询结果。此外,还展示了基于Spring Boot 3和Vue 3构建的前后端分离快速开发框架的实际应用案例,包括项目的核心功能模块如用户管理、角色管理等,并提供Gitee上的开源仓库
2005 11
|
IDE API 开发工具
沉浸式集成阿里云 OpenAPI|Alibaba Cloud API Toolkit for VS Code
Alibaba Cloud API Toolkit for VSCode 是集成了 OpenAPI 开发者门户多项功能的 VSCode 插件,开发者可以通过这个插件方便地查找API文档、进行API调试、插入SDK代码,并配置基础环境设置。我们的目标是缩短开发者在门户和IDE之间的频繁切换,实现API信息和开发流程的无缝结合,让开发者的工作变得更加高效和紧密。
沉浸式集成阿里云 OpenAPI|Alibaba Cloud API Toolkit for VS Code
|
缓存 算法 关系型数据库
深度思考:雪花算法snowflake分布式id生成原理详解
雪花算法snowflake是一种优秀的分布式ID生成方案,其优点突出:它能生成全局唯一且递增的ID,确保了数据的一致性和准确性;同时,该算法灵活性强,可自定义各部分bit位,满足不同业务场景的需求;此外,雪花算法生成ID的速度快,效率高,能有效应对高并发场景,是分布式系统中不可或缺的组件。
3727 2
深度思考:雪花算法snowflake分布式id生成原理详解
|
运维 资源调度 监控
说说Spring定时任务如何大规模企业级运用
聊下java体系中Spring提供的定时任务方案的原理及其企业化运用过程中的一些问题,如何让现有的spring定时任务满足企业级运行需要。
1099 0
|
消息中间件 RocketMQ
RocketMq消费者/生产者配置
RocketMq消费者/生产者配置

热门文章

最新文章