宿迁网络科技有限公司,wordpress 优化速度,短视频app推荐,苏州公司网站建设找哪家作者#xff1a;千习
背景简介
定时任务是指在约定的时间#xff0c;或者按照固定频率周期性执行的任务。在企业应用中#xff0c;非用户行为发起的后台业务#xff0c;一般都是通过定时任务来实现#xff0c;常见场景如下#xff1a;
异步数据处理#xff1a;比如先…作者千习
背景简介
定时任务是指在约定的时间或者按照固定频率周期性执行的任务。在企业应用中非用户行为发起的后台业务一般都是通过定时任务来实现常见场景如下
异步数据处理比如先将订单入库每分钟扫描未支付的订单做批处理。自动化运维比如每小时清理一次数据库的历史记录。系统监控比如每分钟扫描监控指标如果超出阈值进行报警。数据同步比如每天凌晨 1 点把 mysql 中的数据同步到大数据平台中。
在单体应用中实现定时任务很简单比如 Java 中有 java.util.Timer 和 ScheduledExecutorService。在 Spring 框架中也提供了 scheduling 方便的开发定时任务。但是在微服务中一个应用一般来说有很多节点通过以上实现方式就会带来一个致命的问题那就是任务重复执行。 Spring Cloud Alibaba 发布了 Scheduling 任务调度 [ 1] 模块 [#3732] [ 2] 提供了一套开源、轻量级、高可用的定时任务解决方案帮助您快速开发微服务体系下的分布式定时任务。
微服务下的分布式任务能力
定时任务功能作为应用开发中重要能力之一在 Spring Framework [ 3] 中提供了对定时任务支持在其最基础的使用场景下可方便的通过 Scheduled 注解轻松的开发出一个定时任务【剖析参考 [ 4] 】也可以通过扩展集成 Quartz 框架来实现部分分布式能力但其目前无法方便的通过 spring 的 Scheduled 注解快速地定义一个任务。框架原生提供的这些能力在单体应用场景下够用但在微服务分布式集群场景下就显得有些力所不能及了。
因此在 Spring Cloud Alibaba 体系中我们希望提供一个模块能力能在微服务场景下快速接入使用分布式定时任务能力。分布式定时任务应该具备哪些能力特性参考如下对比。 在微服务分布式场景中除了基础的定时任务运行能力还需提供如防重复执行、分片运行、任务执行并行度控制等能力后续还可在此基础上继续探索定时任务对微服务应用服务本身的定时调度支持欢迎在社区提出需求和建议。
快速接入体验
在新版的 Spring Cloud Alibaba 版本中提供分布式任务调度快速启动模块 spring-cloud-starter-alibaba-schedulerx 来支持各类分布式定时任务方案集成。对于采用了 Spring Cloud Alibaba 的微服务应用可以通过添加如下 pom 依赖完成接入。
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-schedulerx/artifactIdversion{version}/version
/dependency在应用配置文件提供了 spring.cloud.scheduling.distributed-mode 参数让用户选择采用哪一种实现方案目前提供了基于“阿里云 schedulerx”和“开源 shedlock”两种模式。后续可根据社区用户需求继续增加其他方案的接入。更为具体详细的接入说明可参考Example 示例工程 [ 5] 。
采用阿里云 SchedulerX
接入 Spring 分布式定时任务最简单的方式就是直接接入阿里云托管的分布式任务调度平台 SchedulerX [ 6] 不但完全兼容 Spring Scheduled 注解还具有高可用、高安全、高性能、免运维、低成本等特点。
任务调度平台 SchedulerX 的任务管理平台可以帮助您动态新增、修改、运维定时任务还有报警监控、历史记录、日志服务、链路追踪等企业级可观测方案同时还可获得如任务分片执行等增强能力为应用线上定时任务稳定运行保驾护航。 接入步骤 登录 SchedulerX 控制台 [ 7] 免费开通服务。 参考接入文档 [ 8] 接入每个账号拥有 5 个免费任务额度可先 0 成本试用体验。 采用本地开源方式
不借助云产品本地接入方式可以再结合 SchedulerLock [ 9] 注解来实现分布式定时任务。
SchedulerLock 注解是一个分布式锁的框架结合 Scheduled 注解可以保证任务同一时间在多个节点上只会执行一次。该框架支持多种分布式锁的实现比如 Jdbc、Zookeeper、Redis 等目前的集成模块中只提供了 Jdbc 的方案后续会继续新增其他模式来满足用户现有场景架构所需。其原理如下 接入步骤
下面以 Mysql 分布式锁为例演示分布式任务的接入过程首先需要按本章节开始说明添加 spring-cloud-starter-alibaba-schedulerx 和对应配置参数除此之外用户还需完成如下配置
由于采用 jdbc 作为分布式锁实现因此还需如下 pom 依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-jdbc/artifactId
/dependency
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.33/version
/dependency在 application.properties 文件中添加 jdbc 配置如果已经添加可以忽略这步
spring.datasource.urljdbc:mysql://127.0.0.1:3306/testdb?useUnicodetruecharacterEncodingutf-8useSSLfalse
spring.datasource.usernameroot
spring.datasource.password123456
spring.datasource.driver-classcom.mysql.cj.jdbc.Driver完成上述配置启动应用后会在对应数据库中创建一个 shedlock 表用于定时任务的执行同步处理。
应用程序代码及任务示例参考如下
配置启动类启用 SchedulingTasks
SpringBootApplication
EnableScheduling
EnableSchedulerLock(defaultLockAtMostFor 3m)
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}创建定时任务
import org.joda.time.DateTime;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;Component
public class SpringJob {/*** 每5分钟跑一次*/Scheduled(cron 0 */5 * * * ?)SchedulerLock(name SpringJob.job1, lockAtMostFor 2m, lockAtLeastFor 1m)public void job1() {System.out.println(time DateTime.now().toString(YYYY-MM-dd HH:mm:ss) do job1...);}/*** 每5秒跑一次*/Scheduled(fixedRate 5000)SchedulerLock(name SpringJob.job2, lockAtMostFor 4s, lockAtLeastFor 4s)public void job2() {System.out.println(time DateTime.now().toString(YYYY-MM-dd HH:mm:ss) do job2...);}/*** 上次跑完之后隔5秒再跑* throws InterruptedException */Scheduled(fixedDelay 5000)SchedulerLock(name SpringJob.job3, lockAtMostFor 4s, lockAtLeastFor 4s)public void job3() throws InterruptedException {System.out.println(time DateTime.now().toString(YYYY-MM-dd HH:mm:ss) do job3...);Thread.sleep(10000);}
}未来规划
Spring Cloud Alibaba 分布式定时调度模块为微服务应用场景提供了快速集成接入解决方案后续可为更多分布式定时任务实现方案提供快速集成比如继续集成 quartz/xxljob 等开源组件且让上述开源组件也都能来适配 spring 的 Scheduled 注解实现一份任务代码可对接不同调度服务同时也会为分布式任务场景下所需的业务能力提供扩展支持。欢迎大家给开源社区 [ 10] 提出关于分布式定时任务的业务功能诉求和建议。
相关链接
[1] Scheduling 任务调度
https://sca.aliyun.com/docs/2023/user-guide/schedulerx/quick-start/
[2] [#3732]
https://github.com/alibaba/spring-cloud-alibaba/pull/3732
[3] Spring Framework
https://docs.spring.io/spring-framework/docs/5.3.37/reference/html/integration.html#scheduling
[4] 剖析参考
https://developer.aliyun.com/article/1015756
[5] Example 示例工程
https://github.com/alibaba/spring-cloud-alibaba/blob/2023.x/spring-cloud-alibaba-examples/spring-cloud-scheduling-example/README.md
[6] 分布式任务调度平台 SchedulerX
https://www.aliyun.com/ntms/middleware/schedulerx
[7] SchedulerX 控制台
https://schedulerx2.console.aliyun.com/public/AppList
[8] 接入文档
https://help.aliyun.com/zh/schedulerx/user-guide/spring-jobs?spm5176.14256785.help.dexternal.f09e126dAXAvEs#p-9sy-0ay-hgx
[9] SchedulerLock
https://github.com/lukas-krecan/ShedLock
[10] 开源社区
https://sca.aliyun.com/ 文章转载自: http://www.morning.wnnlr.cn.gov.cn.wnnlr.cn http://www.morning.tlrxp.cn.gov.cn.tlrxp.cn http://www.morning.smpb.cn.gov.cn.smpb.cn http://www.morning.dongyinet.cn.gov.cn.dongyinet.cn http://www.morning.rgpy.cn.gov.cn.rgpy.cn http://www.morning.bmrqz.cn.gov.cn.bmrqz.cn http://www.morning.lkbyq.cn.gov.cn.lkbyq.cn http://www.morning.xrct.cn.gov.cn.xrct.cn http://www.morning.tgyzk.cn.gov.cn.tgyzk.cn http://www.morning.jzbjx.cn.gov.cn.jzbjx.cn http://www.morning.mhrzd.cn.gov.cn.mhrzd.cn http://www.morning.sfhjx.cn.gov.cn.sfhjx.cn http://www.morning.sjqpm.cn.gov.cn.sjqpm.cn http://www.morning.nbwyk.cn.gov.cn.nbwyk.cn http://www.morning.lfsmf.cn.gov.cn.lfsmf.cn http://www.morning.mdxwz.cn.gov.cn.mdxwz.cn http://www.morning.kaweilu.com.gov.cn.kaweilu.com http://www.morning.bbgn.cn.gov.cn.bbgn.cn http://www.morning.kmqwp.cn.gov.cn.kmqwp.cn http://www.morning.pshpx.cn.gov.cn.pshpx.cn http://www.morning.rrhfy.cn.gov.cn.rrhfy.cn http://www.morning.tgyqq.cn.gov.cn.tgyqq.cn http://www.morning.hxxwq.cn.gov.cn.hxxwq.cn http://www.morning.xdpjf.cn.gov.cn.xdpjf.cn http://www.morning.gbgdm.cn.gov.cn.gbgdm.cn http://www.morning.qwbht.cn.gov.cn.qwbht.cn http://www.morning.lpzyq.cn.gov.cn.lpzyq.cn http://www.morning.cfjyr.cn.gov.cn.cfjyr.cn http://www.morning.xfmzk.cn.gov.cn.xfmzk.cn http://www.morning.nwbnt.cn.gov.cn.nwbnt.cn http://www.morning.mkzdp.cn.gov.cn.mkzdp.cn http://www.morning.gqwbl.cn.gov.cn.gqwbl.cn http://www.morning.wljzr.cn.gov.cn.wljzr.cn http://www.morning.zmlnp.cn.gov.cn.zmlnp.cn http://www.morning.jjzbx.cn.gov.cn.jjzbx.cn http://www.morning.txzmy.cn.gov.cn.txzmy.cn http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn http://www.morning.qnzld.cn.gov.cn.qnzld.cn http://www.morning.qbtkg.cn.gov.cn.qbtkg.cn http://www.morning.czqqy.cn.gov.cn.czqqy.cn http://www.morning.psdsk.cn.gov.cn.psdsk.cn http://www.morning.rmppf.cn.gov.cn.rmppf.cn http://www.morning.kwksj.cn.gov.cn.kwksj.cn http://www.morning.mfltz.cn.gov.cn.mfltz.cn http://www.morning.yhljc.cn.gov.cn.yhljc.cn http://www.morning.qrmry.cn.gov.cn.qrmry.cn http://www.morning.mcgsq.cn.gov.cn.mcgsq.cn http://www.morning.zbgqt.cn.gov.cn.zbgqt.cn http://www.morning.ykwbx.cn.gov.cn.ykwbx.cn http://www.morning.jhfkr.cn.gov.cn.jhfkr.cn http://www.morning.xsgxp.cn.gov.cn.xsgxp.cn http://www.morning.cdlewan.com.gov.cn.cdlewan.com http://www.morning.dwwbt.cn.gov.cn.dwwbt.cn http://www.morning.bpmfl.cn.gov.cn.bpmfl.cn http://www.morning.wjhpg.cn.gov.cn.wjhpg.cn http://www.morning.mdjzydr.com.gov.cn.mdjzydr.com http://www.morning.pwmm.cn.gov.cn.pwmm.cn http://www.morning.gcrlb.cn.gov.cn.gcrlb.cn http://www.morning.smj78.cn.gov.cn.smj78.cn http://www.morning.qzzmc.cn.gov.cn.qzzmc.cn http://www.morning.kgsws.cn.gov.cn.kgsws.cn http://www.morning.lxctl.cn.gov.cn.lxctl.cn http://www.morning.snnkt.cn.gov.cn.snnkt.cn http://www.morning.lqgtx.cn.gov.cn.lqgtx.cn http://www.morning.htjwz.cn.gov.cn.htjwz.cn http://www.morning.jqmqf.cn.gov.cn.jqmqf.cn http://www.morning.zbtfz.cn.gov.cn.zbtfz.cn http://www.morning.rpwck.cn.gov.cn.rpwck.cn http://www.morning.gsyns.cn.gov.cn.gsyns.cn http://www.morning.bfjtp.cn.gov.cn.bfjtp.cn http://www.morning.lkmks.cn.gov.cn.lkmks.cn http://www.morning.rbgwj.cn.gov.cn.rbgwj.cn http://www.morning.nlgmr.cn.gov.cn.nlgmr.cn http://www.morning.bxdlrcz.cn.gov.cn.bxdlrcz.cn http://www.morning.jtybl.cn.gov.cn.jtybl.cn http://www.morning.wjjxr.cn.gov.cn.wjjxr.cn http://www.morning.hjbrd.cn.gov.cn.hjbrd.cn http://www.morning.bhbxd.cn.gov.cn.bhbxd.cn http://www.morning.pcbfl.cn.gov.cn.pcbfl.cn http://www.morning.fyglg.cn.gov.cn.fyglg.cn