XXL-JOB

五分钟体验分布式调度框架xxl-job

﹥>﹥吖頭↗ 提交于 2021-01-09 05:20:56
点击上方“ 方志朋 ”,选择“ 设为星标 ” 回复” 666 “获取新整理的面试文章 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 本教程主要介绍怎么在spring boot工程中快速使用xxl-job。详细的xxl-job的使用文档请参考:https://www.xuxueli.com/xxl-job/ 简介 在xxl-job中,有2个角色: 一个是调度任务管理系统,xll-job-admin 另一个是xxl-job-excutor,通常是我们业务系统,比如本案例的springboot业务系统。 整个调度任务执行流程如下: Xxl-job-admin官方代码已经写好,不做定制化开发的话,直接启动即可正常运行。启动Xxl-job-admin工程。 xxl-job-excuotr需要配置xxl-job-admin的地址,主动向Xxl-job-admin注册,并建立netty连接。在xxl-job-excutor中需要实现excutor的业务代码。 xxl-job-admin Xxl-job-admin是调度任务的管理中心。所有的excutor都会向xxl-job-admin注册,注册完成之后可以对excutor进行任务分发。 在官网中下载最新的release代码,比如本文中的v2.2

xxl-job源码分析

青春壹個敷衍的年華 提交于 2021-01-08 19:57:58
1 调度中心API服务 1、任务结果回调服务; 2、执行器注册服务; 3、执行器注册摘除服务; 4、触发任务单次执行服务,支持任务根据业务事件触发; API暴露代码:com.xxl.job.admin.controller.JobApiController.java API服务位置:com.xxl.job.core.biz.AdminBiz.java 通过请求参数匹配对应方法反射执行后把结果返回给客户端,见代码com.xxl.rpc.remoting.provider.XxlRpcProviderFactoryinvokeService方法invokeService 2 任务注册/ 执行器 注册 任务注册以 "执行器" 为最小粒度进行注册; 每个任务通过其绑定的执行器可感知对应的执行器机器列表;注册表: 见"XXL_JOB_QRTZ_TRIGGER_REGISTRY"表。 "执行器" 注册代码见com.xxl.job.core.thread.ExecutorRegistryThread方法start,在 "执行器" 启动时通过远程调用 com.xxl.job.core.biz.AdminBiz 方法注册。 "执行器" 在进行任务注册时将会周期性维护一条注册记录,即机器地址和AppName的绑定关系; "调度中心" 从而可以动态感知每个AppName在线的机器列表; 执行器注册:

xxl-job学习

自古美人都是妖i 提交于 2020-11-24 02:54:32
1.xxl-job架构图 2.启动xxl-job-admin,启动XxlJobAdminApplication 3.执行器统一管理,插件biz-task项目,移入xxl-job依赖 <!-- xxl-job-core --> <dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.0.0</version> </dependency> 4.集成disconfig、dubbo 相关资料: 官网地址:http://www.xuxueli.com/xxl-job/#/ 来源: oschina 链接: https://my.oschina.net/u/1017791/blog/2870090

【原创】我还是很建议你用DelayQueue搞定超时订单的(1)

北城以北 提交于 2020-11-22 13:22:36
【原创】我还是很建议你用DelayQueue搞定超时订单的(1) 我就是那个人见人爱的 锦成同学,我是java进阶架构师社区的特邀作者, 今天为大家带来新的一篇小知识,祝各位宝宝能学到新知识...更上一层楼..... 一、用三根鸡毛做引言 真的! 不骗你们的喔~ 相信大家都遇到类似于:订单30min后未支付自动取消的开发任务 那么今日份就来了解一下怎么用延时队列 DelayQueue搞定单机版的超时订单 二、延时队列使用场景 那么什么时候需要用延时队列呢?常见的延时任务场景 举栗子: 订单在30分钟之内未支付则自动取消。 重试机制实现,把调用失败的接口放入一个固定延时的队列,到期后再重试。 新创建的店铺,如果在十天内都没有上传过商品,则自动发送消息提醒。 用户发起退款,如果三天内没有得到处理则通知相关运营人员。 预定会议后,需要在预定的时间点前十分钟通知各个与会人员参加会议。 关闭空闲连接,服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。 清理过期数据业务。比如缓存中的对象,超过了空闲时间,需要从缓存中移出。 多考生考试,到期全部考生必须交卷,要求时间非常准确的场景。 三、解决办法多如鸡毛 定期轮询(数据库等) JDK DelayQueue JDK Timer ScheduledExecutorService 周期性线程池 时间轮(kafka) 时间轮

xxl-job 一致性问题

旧街凉风 提交于 2020-11-09 11:23:44
xxl-job的调度中心为高可用的集群部署,那么是如何保证调度的一致性,不会出现多个机器同时触发一个任务,导致任务重复执行。调度中心通过DB锁,保持集群分布式调度的一致性,一次任务只触发一次。为了避免多个调度器同时调度任务,通过数据库的悲观锁(for update). 可以参看 JobScheduleHelper类代码 1 setAutoCommit(false)关闭隐式自动提交事务, 2 启动事务select lock for update(显式排他锁) 3 读db任务信息 -> 拉任务到内存时间轮 -> 更新db任务信息 4 commit提交事务,同时会释放for update的排他锁(悲观锁) 来源: oschina 链接: https://my.oschina.net/u/3126880/blog/4708746

分布式任务调度框架-elastic-job和xxl-job

谁都会走 提交于 2020-11-01 10:06:54
1 、什么是分布式任务调度? 任务调度是指基于给定的时间点,给定的时间间隔或者给定执行次数自动的执行任务。任务调度是是操作系统的重要组成部分,而对于实时的操作系统,任务调度直接影响着操作系统的实时性能。任务调度涉及到多线程并发、运行时间规则定制及解析、线程池的维护等诸多方面的工作。 WEB 服务器在接受请求时,会创建一个新的线程服务。但是资源有限,必须对资源进行控制,首先就是限制服务线程的最大数目,其次考虑以线程池共享服务的线程资源,降低频繁创建、销毁线程的消耗;然后任务调度信息的存储包括运行次数、调度规则以及运行数据等。一个合适的任务调度框架对于项目的整体性能来说显得尤为重要。 2 、常见的任务调度框架有哪些? 我们在实际的开发工作中,或多或少的都会用到任务调度这个功能。常见的分布式任务调度框架有: cronsun 、 Elastic-job 、 saturn 、 lts 、 TBSchedule 、 xxl-job 、 Quartz 等。 在这里我们着重介绍 elastic-job 和 xxl-job 4 、业务场景 当 我们遇到定期任务,比如订单 30 分钟后自动回收 定期执行任务:如每天 0 点做资源稽查; Elastic-job : elastic-Job 是当当开源的一个分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic

分布式任务调度

◇◆丶佛笑我妖孽 提交于 2020-11-01 06:26:03
问题:在分布式环境下,如何保证定时任务的幂等性? 定时任务的实现: java实现: 基于Thread的实现: 基于timetask的实现: 基于线程池的实现: 定时job: 分布式job如何保证幂等性? 推荐使用分布式任务调度平台来解决分布式job的重复性问题。 XXL-JOB的github代码和介绍: https://github.com/xuxueli/xxl-job 详细介绍: https://www.cnblogs.com/xuxueli/p/5021979.html 来源: oschina 链接: https://my.oschina.net/u/4269622/blog/3647187

分布式定时任务调度系统技术解决方案(xxl-job、Elastic-job、Saturn)

时光总嘲笑我的痴心妄想 提交于 2020-10-31 09:31:05
1.业务场景 保险人管系统每月工资结算,平安有150万代理人,如何快速的进行工资结算(数据运算型) 保险短信开门红/电商双十一 1000w+短信发送(短时汇聚型) 工作中业务场景非常多,所涉及到的场景也各不相同,这使得我们定时任务系统应该集管理、调度、任务分配、监控预警为一体的综合调度系统,如何打造一套健壮的、适应不同场景的系统,技术选型尤其重要。 针对以上场景我们需要我们的分布式任务系统具备以下能力: 1.支持多种作业类型(shell作业/Java作业) 2.支持作业HA,负载均衡和失败转移 3.支持弹性扩容(应对开门红以及促销活动) 4.支持Job Timeout 处理 5.支持统一监控和告警 6.支持作业统一配置 7.支持资源隔离和作业隔离 2.定时任务调度的特点 任务调度就是设点某一时间点自动触发的任务,该任务可以在时间规律上去循环执行。一般的技术quartz、spring task、java.util.Timer,这几种如果在单一机器上跑其实问题不大,但是如果一旦应用于集群环境做分布式部署,就会带来一个致命的问题,那就是重复执行,当然解决方案有,但是必须依赖数据库,将任务执行状态持久化下来。 特点: 时间驱动:系统一般可以通过时间来驱动,定时定点定次。 批量处理:批量处理堆积的数据更加高效,在不需要实时性的情况下比消息中间件更有优势。而且有的业务逻辑只能批量处理

如果mysql磁盘满了,会发生什么?还真被我遇到了!

痞子三分冷 提交于 2020-10-30 16:08:34
来源 | https://urlify.cn/jemaym 使用命令发现磁盘使用率为100%了,还剩几十兆。 一系列神操作 备份数据库,删除实例、删除数据库表、重启mysql服务,结果磁盘空间均没有释放。 怎么办 网上查了很多资源,说要进行磁盘碎片化整理。原因是datafree占据的空间太多啦。具体可以通过这个sql查看。 SELECT CONCAT ( TRUNCATE ( SUM (data_length)/ 1024 / 1024 , 2 ), 'MB' ) AS data_size, CONCAT ( TRUNCATE ( SUM (max_data_length)/ 1024 / 1024 , 2 ), 'MB' ) AS max_data_size, CONCAT ( TRUNCATE ( SUM (data_free)/ 1024 / 1024 , 2 ), 'MB' ) AS data_free, CONCAT ( TRUNCATE ( SUM (index_length)/ 1024 / 1024 , 2 ), 'MB' ) AS index_size FROM information_schema.tables WHERE TABLE_NAME = 'datainfo' ; 这个是后来的图了,之前的图没有留,当时显示一张表里的data_free都达到了20个G。