邓布利多

导航

 

参考页面:https://www.xuxueli.com/xxl-job/

 

架构图:

 

 

5.4.2 自研调度模块

XXL-JOB最终选择自研调度组件(早期调度组件基于Quartz);一方面是为了精简系统降低冗余依赖,另一方面是为了提供系统的可控度与稳定性;

XXL-JOB中“调度模块”和“任务模块”完全解耦,调度模块进行任务调度时,将会解析不同的任务参数发起远程调用,调用各自的远程执行器服务。这种调用模型类似RPC调用,调度中心提供调用代理的功能,而执行器提供远程服务的功能。

5.4.3 调度中心HA(集群)

基于数据库的集群方案,数据库选用Mysql;集群分布式并发环境中进行定时任务调度时,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果触发器的名称和执行时间相同,则只有一个节点去执行此任务。

5.4.4 调度线程池

调度采用线程池方式实现,避免单线程因阻塞而引起任务调度延迟。

5.4.5 并行调度

XXL-JOB调度模块默认采用并行机制,在多线程调度的情况下,调度模块被阻塞的几率很低,大大提高了调度系统的承载量。

XXL-JOB的每个调度任务虽然在调度模块是并行调度执行的,但是任务调度传递到任务模块的“执行器”确实串行执行的,同时支持任务终止。

5.4.6 过期处理策略

任务调度错过触发时间时的处理策略:

  • 可能原因:服务重启;调度线程被阻塞,线程被耗尽;上次调度持续阻塞,下次调度被错过;
  • 处理策略:
    • 过期超5s:本次忽略,当前时间开始计算下次触发时间
    • 过期5s内:立即触发一次,当前时间开始计算下次触发时间

 

 

 

3.2 BEAN模式(方法形式)

Bean模式任务,支持基于方法的开发方式,每个任务对应一个方法。

  • 优点:
    • 每个任务只需要开发一个方法,并添加”@XxlJob”注解即可,更加方便、快速。
    • 支持自动扫描任务并注入到执行器容器。
  • 缺点:要求Spring容器环境;

基于方法开发的任务,底层会生成JobHandler代理,和基于类的方式一样,任务也会以JobHandler的形式存在于执行器任务容器中。

步骤一:执行器项目中,开发Job方法:

  1. 1、在Spring Bean实例中,开发Job方法,方式格式要求为 "public ReturnT<String> execute(String param)"
  2. 2、为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。
  3. 3、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
  1. // 可参考Sample示例执行器中的 "com.xxl.job.executor.service.jobhandler.SampleXxlJob" ,如下:
  2. @XxlJob("demoJobHandler")
  3. public ReturnT<String> execute(String param) {
  4. XxlJobLogger.log("hello world.");
  5. return ReturnT.SUCCESS;
  6. }

步骤二:调度中心,新建调度任务

参考上文“配置属性详细说明”对新建的任务进行参数配置,运行模式选中 “BEAN模式”,JobHandler属性填写任务注解“@XxlJob”中定义的值;

输入图片说明

原生内置Bean模式任务

为方便用户参考与快速实用,示例执行器内原生提供多个Bean模式任务Handler,可以直接配置实用,如下:

  • demoJobHandler:简单示例任务,任务内部模拟耗时任务逻辑,用户可在线体验Rolling Log等功能;
  • shardingJobHandler:分片示例任务,任务内部模拟处理分片参数,可参考熟悉分片任务;
  • httpJobHandler:通用HTTP任务Handler;业务方只需要提供HTTP链接等信息即可,不限制语言、平台。示例任务入参如下:
    1. url: http://www.xxx.com
    2. method: get post
    3. data: post-data
  • commandJobHandler:通用命令行任务Handler;业务方只需要提供命令行即可;如 “pwd”命令;
posted on 2020-10-20 17:20  邓布利多  阅读(455)  评论(0)    收藏  举报