工具篇--分布式定时任务 Xxl-job 与 ElasticJob的对比

本文对比了Xxl-job和ElasticJob的架构、作业模式(包括任务路由和分片)、日志记录机制,指出Xxl-job适合Spring项目,而ElasticJob更灵活且功能强大,适用于复杂定时任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

本文对分布式调度任务 Xxl-job 与 ElasticJob的对比 进行介绍。


一、架构:

Xxl-job : cs 架构 ,分为客户端和服务端,是有中心的架构,客户端为执行job 任务的执行器实例;服务端可以进行单独的集群部署,服务端控制任务的触发,以及任务的分配,故障转移,日志记录等;服务端承接了大部分的工作;

在这里插入图片描述

ElasticJob: cs 架构,分为客户端和服务端,是无中心的架构;客户端为执行job 任务的执行器实例;服务端为集群的zookeeper ,其中zookeeper 保存注册任务的实例,任务的配置项,以及负责leader 的选举;任务具体有哪个实例去执行,是由leader (也是一个job 执行的实例)进行的分配; 任务的触发,以及任务的分配,故障转移,日志记录等都是由 elasticjob-lite-core 进行管理,客户端承接了大部分的工作;
在这里插入图片描述

二、作业:

Xxl-job :作业分为 广播作业 和 某个实例单独作业;其中广播作业在任务达到时间被触发时,会被发送到所有有效的实例;某个实例单独作业 只会被发送到某个实例中;

xxl-job 任务路由策略:
在这里插入图片描述

ElasticJob:作业分为 简单作业和 流式的作业,其中简单作业同xxl-job 相同,当任务达到时间被触发时,leader 会选择某个节点进行作业;与简单作业不同 流式作业 提供了两个方法当每一次任务触发,只要fetchData 能返回数据,则当前这次任务就会一直调用 processData 进行作业,直到 fetchData 返回为null 或者集合为空;

ElasticJob 注册到zookeeper 的任务实例:
在这里插入图片描述

ElasticJob 中有分片的概念,来弥补某个实例单独作业 其它实例空闲,可以将任务定义分片数量,分片数量可以大于job 实例数,从而提高并发性能;当某个分片接收到任务是,可以根据当前分片得到对应的参数,从而执行不同的业务逻辑处理;

import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.elasticjob.api.ShardingContext;
import org.apache.shardingsphere.elasticjob.simple.job.SimpleJob;
import org.springframework.stereotype.Component;


@Slf4j
@Component
public class MyJob implements SimpleJob {
    @Override
    public void execute(ShardingContext shardingContext) {

        // 分片参数 0=text,1=image,2=radio,3=vedio
        String  shardingParameter= shardingContext.getShardingParameter();
        String  jobParameter= shardingContext.getJobParameter();

        log.debug("job 执行 error,job名称:{},分片数量:{},分片:{},分片参数:{},jobParamer:{}", shardingContext.getJobName(), shardingContext.getShardingTotalCount(),
                shardingContext.getShardingItem(), shardingParameter,jobParameter);
        if ("text".equals(jobParameter)) {
            // do something by sharding
        }
        switch (shardingContext.getShardingItem()) {
            case 0:
                // do something by sharding item 0
                break;
            case 1:
                // do something by sharding item 1
                break;
            case 2:
                // do something by sharding item 2
                break;
            // case n: ...
        }
    }
}

三、日志记录:

Xxl-job : 通过http 请求通信,在服务端记录job 的执行情况,并生成日志记录,展现日志的执行情况;
在这里插入图片描述

ElasticJob: 需要单独在job 里定义 日志记录的数据源,从而在客户端的数据可以记录日志,需要部署对应 ElasticJob-Console 登陆后,配置对应的数据源,从而可以得到job 的执行情况;
在这里插入图片描述


总结

综合来看,Xxl-job 更适合于在 Spring 生态圈中使用的项目,提供了简洁易用的任务管理界面;而 ElasticJob 则更加灵活,功能更为丰富,适用范围更广泛,可以满足复杂的分布式定时任务需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值