重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍“分布式调度框架xxl-job的作用是什么”,在日常操作中,相信很多人在分布式调度框架xxl-job的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”分布式调度框架xxl-job的作用是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
成都创新互联是一家集网站建设,资中企业网站建设,资中品牌网站建设,网站定制,资中网站建设报价,网络营销,网络优化,资中网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
1、定时任务使用场景
定时备份数据,订单超时自动取消,按时间段统计信息,优惠券要过期给用户发送一个提醒等等。
2、定时任务的基本概念
执行器:负责执行任务。
调度器:根据配置(cron表达式)详情,告知执行器去执行任务
任务:自己的业务实现,比如优惠券要过期给用户发送一个提醒。
3、spring中使用定时任务。
@Slf4j @Component //使spring管理 @EnableScheduling //定时任务注解 public class Timer { @Autowired IPayRecordService iPayRecordService; @Scheduled(cron = "0/10 * * * * ?") public void notifyOrder(){ log.info("timer notifyOrder ...."); try { iPayRecordService.notifyOrder(); }catch (Exception e){ log.error("notifyOrder error:",e); } } }
4、spring定时任务存在的问题
不支持集群部署:比如你启动三个实例,每个实例都会去触发执行器去执行“优惠券要过期给用户发送一个提醒”这个任务,这时候就产生了重复执行的问题。 通常是单机部署的,单机就存在挂掉的风险。
不支持失败重试:出现异常后任务终结,不能根据执行状态,控制任务重新执行
不支持动态管理:不支持不重启任务情况下,关闭和启动任务,修改cron表达式等。
无报警:任务失败后不能发送报警通知
不支持分片任务
等等。
5、分布式定时任务框架的实现思路
调度中心会配置 cron表达式,路由策略,处理类的bean实例,比如demoHandler。
路由策略意思就是如何选择执行器,比如随机选择一个,轮训等。调度中心通过RPC 通知执行器去执行任务,会带上处理bean的名字(demoHandler),进入执行器的任务队列,执行器的执行引擎会从任务队列里取出任务,根据bean 的名字获取对应的bean实例进行执行。
执行器需要向调度中心发生心跳,对于长时间没有收到心跳的执行器,调度中心会将其剔除。
6、为什么要用XXL-JOB?
XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
目前已有多家公司接入xxl-job,包括比较知名的大众点评,京东,优信二手车,北京尚德,360金融 (360),联想集团 (联想),易信 (网易)等等....
7、为什么不用quartz?
Quartz存在一些问题:
问题一:调用API的的方式操作任务,不人性化;
问题二:需要持久化业务QuartzJobBean到底层数据表中,系统侵入性相当严重。
问题三:调度逻辑和QuartzJobBean耦合在同一个项目中,这将导致一个问题,在调度任务数量逐渐增多,同时调度任务逻辑逐渐加重的情况下,此时调度系统的性能将大大受限于业务;
问题四:quartz底层以“抢占式”获取DB锁并由抢占成功节点负责运行任务,会导致节点负载悬殊非常大;而XXL-JOB通过执行器实现“协同分配式”运行任务,充分发挥集群优势,负载各节点均衡。
XXL-JOB弥补了quartz的上述不足之处。
8、XXL-JOB高可用调度中心会部署多台xxl-job-admin,如何保证多个调度中心分发任务只分发一次?(版本V2.0.1)
调度采用中心式设计,“调度中心”基于集群Quartz实现并支持集群部署,可保证调度中心HA;并通过数据库悲观锁来实现任务在集群的多台机器中只执行一次
到此,关于“分布式调度框架xxl-job的作用是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!