xxl-job进阶和原理分析

1.xxl-job任务执行流程

MethodJobHandler是处理java定时任务的方法,当我们用java开发了定时任务方法,然后用@XxlJob注解修饰方法,就可以调度该定时任务方法了。我们看看MethodJobHandler的execute方法是如何执行定时任务方法的。

//代码位置:com.xxl.job.core.handler.impl.MethodJobHandler#execute
public void execute() throws Exception {
        Class<?>[] paramTypes = method.getParameterTypes();
        if (paramTypes.length > 0) {
            method.invoke(target, new Object[paramTypes.length]);       // method-param can not be primitive-types
        } else {
            method.invoke(target);
        }
}

可以看出MethodJobHandler的execute方法利用反射,获取定时任务的method,然后利用invoke执行定时任务方法。所以我们看到很多网站上给出的实战代码并没有重写execute方法,而是直接自定义了一个方法。因为MethodJobHandler的execute方法可以利用反射,获取定时任务的method。

2.出入参数

在最新版本的 xxl-job 中,任务核心类 “IJobHandler” 的 “execute” 方法取消出入参设计。改为通过 “XxlJobHelper.getJobParam” 获取任务参数并替代方法入参,通过 “XxlJobHelper.handleSuccess/handleFail” 设置任务结果并替代方法出参,示例代码如下

(这种情况就是在你需要传入参数,在函数中需要参数的时候,在最新版本中使用XxlJobHelper.getJobParam,运行成功或者异常报错用XxlJobHelper.handleSuccess/handleFail

@XxlJob("demoJobHandler")
public void execute() {
  String param = XxlJobHelper.getJobParam();    // 获取参数
  XxlJobHelper.handleSuccess();                 // 设置任务结果
}

3.xxl-job的集群部署

不过需要注意的是,XXL-JOB的集群不是分片集群,不管部署多少台,同一时间执行调度任务的只会有一台,集群部署纯粹只是为了处理单点故障问题,但是也不是单纯的主备关系。
从上面的配置中可以发现,XXL-JOB的集群中有节点宕机后并不会做选举,实际上XXL-JOB的每个节点都可以提供服务,只要不是所有节点一起宕机,就不会有单点故障的问题。

(注册的时候不同port可实现单机集群)

参考:xxl-job定时任务执行流程分析-任务执行 - 知乎 (zhihu.com)

分布式调度中间件xxl-job(四):执行器Executor--执行器的注册-腾讯云开发者社区-腾讯云 (tencent.com)

重复调度怎么处理呢?
重复调度问题一般是通过分布式锁来处理的,实现分布式锁的方式有很多,XXL-JOB选择的方式是通过数据库的锁来实现的。

调度性能如何保障的呢?
在XXL-JOB的架构中,调度器与执行器是分离的,并且所有的调度流程都实现了异步化,从而大大降低了调度中心的性能压力,所以一台调度中心服务器就可以满足要求了。

XXL-JOB的调度中心集群部署只需要满足两个条件:

  • 多个节点使用同一个数据库。
  • 多台机器的系统时间配置成一样的。

此外,可以通过反向代理服务器,配置调度中心的统一入口。

避免任务重复调度:

使用XXL-JOB时,如何避免多台服务器重复调度任务?|工作踩坑系列_程序员小彭的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: XXL-Job 是一个基于 Java 的分布式任务调度框架,它使用分布式节点将任务分解为子任务,并在不同节点上执行它们。它支持任务调度、任务跟踪和任务执行等功能,可以帮助你管理分布式计算环境中的任务流。 ### 回答2: xxl-job 是一款分布式任务调度框架,其实现原理主要分为三个方面。 首先,xxl-job 采用了主从分布式架构。主节点负责接收任务提交请求,并将任务信息存储到数据库中,同时生成一个唯一的任务ID。任务ID通过网络传输给从节点,从节点根据任务ID向主节点请求任务信息。主从节点之间通过网络通信,保持了实时的数据同步和任务信息的传递。 其次,xxl-job 使用了任务调度算法。依据任务的调度策略和触发规则,xxl-job 能够根据设定的时间点或时间间隔触发任务执行。同时,xxl-job 还提供了灵活的任务路由策略,可以将任务动态地路由到不同的执行器上。这样,任务就可以根据负载情况行分布式调度,提高了任务执行的效率和稳定性。 最后,xxl-job 使用了分布式任务执行器。分布式任务执行器是动态部署在不同的执行节点上的,执行节点可以是集群中的任意一台机器。主节点将任务信息发送给执行节点并触发任务执行,然后执行节点根据任务信息实时执行任务。任务执行完毕后,执行节点将执行结果返回给主节点,并更新任务执行记录。 综上所述,xxl-job 的实现原理主要包括主从分布式架构、任务调度算法和分布式任务执行器。它通过合理的任务调度和任务执行方式,实现了高效、稳定的分布式任务调度。 ### 回答3: xxl-job 是一个分布式任务调度平台,它的实现原理如下: 1. 调度中心:xxl-job 的核心是调度中心,它负责任务的注册、调度和管理。调度中心维护了一个任务队列和调度日历,根据任务的优先级、依赖关系和调度策略,将任务分发给工作者执行。调度中心还会定期检查任务的执行情况,如果任务执行失败或超时,会行重试或告警处理。 2. 执行器:执行器是任务的实际执行者,它负责接收调度中心分发的任务,并执行具体的业务逻辑。执行器启动后会向调度中心注册自己的信息,并周期性地向调度中心发送心跳,以表明自己的存活状态。当调度中心分发任务给执行器时,执行器会根据任务的类型行相应的处理,如执行 shell 脚本、执行 Java 程序等,并将执行结果返回给调度中心。 3. 调度器:调度器是负责任务调度的组件,它根据任务的调度策略和触发条件,决定任务何时执行。调度器可以根据固定的时间间隔、固定的时间点或触发条件来触发任务的执行,还可以设置任务的依赖关系,实现任务的串行或并行执行。 4. 监控报警:xxl-job 还提供了任务的监控和报警功能,可以实时监控任务的执行情况,并根据设定的告警规则发送告警信息。监控报警模块可以帮助用户及时发现任务执行异常,提高任务执行的可靠性和稳定性。 总结来说,xxl-job 实现了一个分布式任务调度平台,通过调度中心、执行器、调度器和监控报警模块的协作,实现了任务的注册、调度、执行和监控报警等功能,提供了简单易用的任务调度管理工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值