Spring Cloud Alibaba定时任务

简介: Spring Cloud Alibaba定时任务是阿里巴巴开发的一款低延时、高可用、可视化的任务调度产品(定时、任务依赖编排、分布式跑批),支持日志服务、监控大盘、报警监控。

背景

定时任务是每个业务常见的需求,比如每分钟扫描超时支付的订单,每小时清理一次数据库历史数据,每天统计前一天的数据并生成报表等等。


在Java中自带的解决方案

  • Jdk timer:固定频率执行,同一个线程串行执行
  • Jdk ScheduledExecutorService:固定频率执行,支持多线程并发执行,解决timer串行的问题。

以上两种方案都不支持cron表达式,在分布式架构下也不支持幂等执行,一般用的比较少。


Spring中解决方案

  • Spring task:支持cron表达式,使用比较轻量,适用于单节点的应用,分布式架构下不支持幂等执行,需要业务自己做抢锁。
  • Quartz:Springboot2.0版本支持quartz集成,可以结合数据库做持久化,框架封装抢锁触发逻辑,解决Spring task不支持幂等执行的问题。


如上解决方案都无可视化界面,运维比较麻烦,且无报警,在生产环境容易出问题。Spring Cloud Alibaba定时任务是阿里巴巴基于SchedulerX2.0开发的企业级定时任务解决方案,只需要在application文件中定义自己的任务,就可以一键部署起来,具有环境隔离、应用隔离、高可用、低延时、可视化、可报警等能力。


优势

Spring原生

支持Springboot声明式定义,命名空间、应用、任务、报警等都通过配置文件声明,方便管理自己应用下的任务,并且可以支持修改。可以拿到任何环境一键启动应用。


高可用

SchedulerX2.0采用高可用架构,任务多备份机制,经历阿里集团多年双十一、容灾演练,可以做到整个集群挂掉任意一个机房,任务调度都不会收到影响。


可视化

schedulerx拥有丰富的可视化能力,比如

  • 用户大盘

  • 查看任务历史执行记录

  • 查看任务运行日志

  • 查看任务运行堆栈

  • 查看任务操作记录


报警监控

  • 报警:支持邮件、钉钉、短信、电话,其他报警方式在规划中。支持任务失败、超时、无可用机器报警。报警内容可以简单的看出任务失败的原因,以钉钉机器人为例


分布式模型

Schedulerx2.0提供了丰富的分布式模型,可以处理各种各样的分布式处理业务场景。包括单机、广播、分片、MapReduce等。


如何接入

完整的demo工程请点击下载

  1. 登录阿里云分布式任务调度Schedulerx2.0控制台,点击开通服务


  1. pom增加依赖schedulerx2-spring-boot-starter,需要1.5.0.2以上版本
<dependency><groupId>com.aliyun.schedulerx</groupId><artifactId>schedulerx2-spring-boot-starter</artifactId><version>1.5.0.2</version></dependency>

3. 配置application.yml

spring:   schedulerx2:      endpoint: acm.aliyun.com   #请填写不同regin的endpoint      namespace: 433d8b23-06e9-xxxx-xxxx-90d4d1b9a4af #region内全局唯一,建议使用UUID生成      namespaceName: 学仁测试
      appName: myTest
      groupId: myTest.group      #同一个命名空间下需要唯一      appKey: myTest123@alibaba  #应用的key,不要太简单,注意保管好      regionId: public           #填写对应的regionId      aliyunAccessKey: xxxxxxx   #阿里云账号的ak      aliyunSecretKey: xxxxxxx   #阿里云账号的sk      alarmChannel: sms,ding     #报警通道:短信和钉钉      jobs:          simpleJob:             jobModel: standalone
            className: com.aliyun.schedulerx.example.processor.SimpleJob
            cron: 0/30 * * * * ?   # cron表达式            jobParameter: hello
            overwrite: true 
         shardingJob:             jobModel: sharding
            className: ccom.aliyun.schedulerx.example.processor.ShardingJob
            oneTime: 2022-06-02 12:00:00   # 一次性任务表达式            jobParameter: 0=Beijing,1=Shanghai,2=Guangzhou
            overwrite: true         broadcastJob:   # 不填写cron和oneTime,表示api任务            jobModel: broadcast
            className: com.aliyun.schedulerx.example.processor.BroadcastJob
            jobParameter: hello
            overwrite: true         mapReduceJob:             jobModel: mapreduce
            className: com.aliyun.schedulerx.example.processor.MapReduceJob
            cron: 0 * * * * ?
            jobParameter: 100            overwrite: true      alarmUsers:     #报警联系人         user1:            userName: 张三
            userPhone: 12345678900         user2:            userName: 李四
            ding: https://oapi.dingtalk.com/robot/send?access_token=xxxxx
  1. 实现任务接口,以单机任务为例,更多任务模型可以看demo
packagecom.aliyun.schedulerx.example.processor;
importorg.slf4j.Logger;
importorg.slf4j.LoggerFactory;
importorg.springframework.stereotype.Component;
importcom.alibaba.schedulerx.worker.domain.JobContext;
importcom.alibaba.schedulerx.worker.processor.JavaProcessor;
importcom.alibaba.schedulerx.worker.processor.ProcessResult;
/*** 单机任务,所有节点随机选一台执行*/@ComponentpublicclassSimpleJobextendsJavaProcessor {
/** log4j2/logback配置schedulerxLogAppender,可以进行日志采集*/privatestaticfinalLoggerlogger=LoggerFactory.getLogger("schedulerx");
@OverridepublicProcessResultprocess(JobContextcontext) throwsException {
System.out.println("this is process, para="+context.getJobParameters());
logger.info("hello schedulerx!");
returnnewProcessResult(true);
    }
@Overridepublicvoidkill(JobContextcontext) {
    }
}

如何验证

启动你的springboot启动类,大概1分钟左右,你的定时任务就可以正常调度起来了。


如果想要通过控制台验证和查看任务,也可以访问控制台

  1. 命名空间创建成功

  1. 应用创建成功,且有实例注册成功

  1. 任务创建成功

  1. 查看历史记录

目录
相关文章
|
1天前
|
Java 调度 Maven
Springboot实战篇--Springboot框架通过@Scheduled实现定时任务
Spring Boot的Scheduled定时任务无需额外Maven依赖,通过`@EnableScheduling`开启。任务调度有两种方式:fixedRate和fixedDelay,前者任务结束后立即按设定间隔执行,后者在任务完成后等待设定时间再执行。更灵活的是cron表达式,例如`0 0 3 * * ?`表示每天3点执行。实现定时任务时,需注意默认单线程执行可能导致的任务交错,可通过自定义线程池解决。
|
2天前
|
JSON Java Apache
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
|
2天前
|
负载均衡 Java 开发者
Spring Cloud:一文读懂其原理与架构
Spring Cloud 是一套微服务解决方案,它整合了Netflix公司的多个开源框架,简化了分布式系统开发。Spring Cloud 提供了服务注册与发现、配置中心、消息总线、负载均衡、熔断机制等工具,让开发者可以快速地构建一些常见的微服务架构。
|
4天前
|
消息中间件 Java RocketMQ
Spring Cloud RocketMQ:构建可靠消息驱动的微服务架构
【4月更文挑战第28天】消息队列在微服务架构中扮演着至关重要的角色,能够实现服务之间的解耦、异步通信以及数据分发。Spring Cloud RocketMQ作为Apache RocketMQ的Spring Cloud集成,为微服务架构提供了可靠的消息传输机制。
15 1
|
4天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo: 微服务通信的高效解决方案
【4月更文挑战第28天】在微服务架构的发展中,服务间的高效通信至关重要。Spring Cloud Dubbo 提供了一种基于 RPC 的通信方式,使得服务间的调用就像本地方法调用一样简单。本篇博客将探讨 Spring Cloud Dubbo 的核心概念,并通过具体实例展示其在项目中的实战应用。
13 2
|
4天前
|
监控 Java Sentinel
Spring Cloud Sentinel:概念与实战应用
【4月更文挑战第28天】在分布式微服务架构中,确保系统的稳定性和可靠性至关重要。Spring Cloud Sentinel 为微服务提供流量控制、熔断降级和系统负载保护,有效预防服务雪崩。本篇博客深入探讨 Spring Cloud Sentinel 的核心概念,并通过实际案例展示其在项目中的应用。
13 0
|
4天前
|
Cloud Native Java Nacos
Spring Cloud Nacos:概念与实战应用
【4月更文挑战第28天】Spring Cloud Nacos 是一个基于 Spring Cloud 构建的服务发现和配置管理工具,适用于微服务架构。Nacos 提供了动态服务发现、服务配置、服务元数据及流量管理等功能,帮助开发者构建云原生应用。
10 0
|
7天前
|
Java 数据安全/隐私保护 Sentinel
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
微服务学习 | Spring Cloud 中使用 Sentinel 实现服务限流
|
7天前
|
消息中间件 Java 中间件
第十六章 Spring cloud stream应用
第十六章 Spring cloud stream应用
13 0
|
8天前
|
Java API Nacos
第十二章 Spring Cloud Alibaba Sentinel
第十二章 Spring Cloud Alibaba Sentinel
18 0