Apache ShardingSphere ElasticJob Java API 使用指南

Apache ShardingSphere ElasticJob Java API 使用指南

shardingsphere-elasticjob Distributed scheduled job shardingsphere-elasticjob 项目地址: https://gitcode.com/gh_mirrors/sha/shardingsphere-elasticjob

概述

Apache ShardingSphere ElasticJob 是一个分布式任务调度解决方案,提供了弹性调度、任务分片、故障转移等高级功能。本文将详细介绍如何使用 ElasticJob 的 Java API 来配置和运行分布式任务。

任务配置

ElasticJob 采用构建器模式创建任务配置对象,这种方式使得配置更加清晰和灵活。以下是一个典型配置示例:

JobConfiguration jobConfig = JobConfiguration.newBuilder("myJob", 3)
    .cron("0/5 * * * * ?")
    .shardingItemParameters("0=Beijing,1=Shanghai,2=Guangzhou")
    .build();

关键配置项说明:

  • myJob:任务名称,需唯一标识
  • 3:分片总数,表示任务将被分成3个分片执行
  • cron:定时表达式,控制任务执行时间
  • shardingItemParameters:分片参数,可为每个分片指定不同参数

任务启动方式

ElasticJob 提供两种任务调度模式:定时调度和一次性调度。

定时调度实现

定时调度会按照配置的 cron 表达式周期性地执行任务:

public class JobDemo {
    public static void main(String[] args) {
        // 基于类的定时调度
        new ScheduleJobBootstrap(createRegistryCenter(), new MyJob(), createJobConfiguration()).schedule();
        
        // 基于类型的定时调度
        new ScheduleJobBootstrap(createRegistryCenter(), "MY_TYPE", createJobConfiguration()).schedule();
    }
    
    private static CoordinatorRegistryCenter createRegistryCenter() {
        // 创建注册中心配置
        ZookeeperConfiguration zkConfig = new ZookeeperConfiguration("zk_host:2181", "elastic-job-demo");
        CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(zkConfig);
        regCenter.init();
        return regCenter;
    }
}

一次性调度实现

一次性调度适合需要手动触发的任务场景:

public class JobDemo {
    public static void main(String[] args) {
        OneOffJobBootstrap jobBootstrap = new OneOffJobBootstrap(
            createRegistryCenter(), 
            new MyJob(), 
            createJobConfiguration()
        );
        
        // 可多次调用执行
        jobBootstrap.execute();
    }
}

任务诊断功能

在生产环境中,分布式任务的问题往往难以直接调试。ElasticJob 提供了 dump 命令来导出任务运行时信息:

public class JobMain {
    public static void main(final String[] args) {
        // 开启监听端口9888用于dump诊断
        SnapshotService snapshotService = new SnapshotService(regCenter, 9888).listen();
    }
}

使用该功能后,可以通过指定端口获取任务运行时状态,便于问题排查。

错误处理策略

ElasticJob 提供了多种错误处理策略,开发者可以根据业务需求选择合适的策略:

内置策略对比

| 策略名称 | 描述 | 是否内置 | 是否默认 | 需要额外配置 | |---------|------|---------|---------|-------------| | 日志策略 | 记录错误日志不中断任务 | 是 | 是 | 否 | | 抛出策略 | 抛出异常中断任务 | 是 | 否 | 否 | | 忽略策略 | 忽略异常不中断任务 | 是 | 否 | 否 | | 邮件通知 | 发送邮件通知不中断任务 | 否 | 否 | 是 | | 企业微信通知 | 发送企业微信通知不中断任务 | 否 | 否 | 是 | | 钉钉通知 | 发送钉钉通知不中断任务 | 否 | 否 | 是 |

策略实现示例

日志策略(默认)
JobConfiguration.newBuilder("myJob", 3)
    .cron("0/5 * * * * ?")
    .jobErrorHandlerType("LOG")
    .build();
邮件通知策略

首先添加 Maven 依赖:

<dependency>
    <groupId>org.apache.shardingsphere.elasticjob</groupId>
    <artifactId>elasticjob-error-handler-email</artifactId>
    <version>${latest.version}</version>
</dependency>

然后配置任务:

JobConfiguration jobConfig = JobConfiguration.newBuilder("myJob", 3)
    .jobErrorHandlerType("EMAIL")
    .build();

// 设置邮件服务器配置
jobConfig.getProps().setProperty("host", "smtp.example.com");
jobConfig.getProps().setProperty("port", "465");
// 其他必要配置...
钉钉通知策略

添加依赖:

<dependency>
    <groupId>org.apache.shardingsphere.elasticjob</groupId>
    <artifactId>elasticjob-error-handler-dingtalk</artifactId>
    <version>${latest.version}</version>
</dependency>

配置任务:

JobConfiguration jobConfig = JobConfiguration.newBuilder("myJob", 3)
    .jobErrorHandlerType("DINGTALK")
    .build();

// 设置钉钉机器人配置
jobConfig.getProps().setProperty("webhook", "your_webhook_url");
jobConfig.getProps().setProperty("secret", "your_secret");

最佳实践建议

  1. 注册中心配置:生产环境建议使用集群模式的 Zookeeper,确保高可用
  2. 分片策略:合理设置分片数量,通常与执行节点数量成比例关系
  3. 错误处理:关键业务建议使用通知类策略,非关键业务可使用日志策略
  4. 任务命名:采用有意义的命名,便于后期维护和监控
  5. 参数配置:充分利用分片参数实现数据分区处理

通过本文的介绍,开发者应该能够掌握 ElasticJob Java API 的基本使用方法,并能够根据实际业务需求配置合适的任务调度策略。

shardingsphere-elasticjob Distributed scheduled job shardingsphere-elasticjob 项目地址: https://gitcode.com/gh_mirrors/sha/shardingsphere-elasticjob

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

支然苹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值