定时任务概述

简介: 定时任务是基于时间表达式调度执行的任务,适用于对账、提醒、订单超时等场景。实现方案包括单体架构的轮询、Timer、ScheduledExecutorService、Quartz、SpringTask,以及分布式架构下的TBSchedule、Elastic-Job、XXL-JOB等,解决集群重复执行、动态调度、故障转移与监控问题。

什么是定时任务

通过时间表达式来进行调度和执行的一类任务被称为定时任务。一般能解决的业务场景:定时对账、服务到期的定时提醒、订单超时未支付的自动取消等。

有哪些定时任务实现方案

单体架构调度技术

  • 轮询+线程休眠

while(true) + Thread.sleep

  • java.util.Timer + java.util.TimerTask

Timer是一个定时器工具,用来在一个后台线程计划执行指定任务,它可以计划执行一个任务或反复多次

TimerTask是一个抽象类,它的子类代表一个可以被Timer计划执行的任务

  • ScheduledExecutorService

JDK1.5之后作为并发工具被引入,默认只支持周期性的执行频率(如每秒/每分钟),要支持具体某一刻年月日时分秒的执行窗口需要自定义扩展,较麻烦

  • Quartz

开源任务调度框架,Java语言编写实现,支持Spring整合使用

  • SpringTask

spring框架提供的轻量级定时任务调用工具

SpringBoot框架下可使用注解:@EnableScheduling+@Scheduled,底层还是SpringTask

分布式架构调度技术

分布式场景可能遇到的问题

  • 多台机器集群部署的定时任务如何保证不被重复执行
  • 如果在不重启服务前提下,动态调整定时任务执行时间
  • 部署定时任务的机器发生故障如何故障转移
  • 如何对定时任务做任务监控

业界解决方案

  • 淘宝:TBSchedule,现在是:ScheduleX
  • 当当:Elastic-Job
  • 唯品会:Saturn,基于当当的二次开发,新增一些特性
  • 大众点评:XXL-JOB
相关文章
|
26天前
Watcher机制(一)
本文深入分析Zookeeper的Watcher机制,涵盖核心类与源码实现。重点解析Watcher、Event、WatchedEvent等接口与类,梳理其内部结构及事件通知流程,帮助理解Zookeeper的数据变更监听原理。
41 0
Watcher机制(一)
|
26天前
|
存储 搜索推荐 数据库
ES分布式搜索引擎入门
本课程介绍Elasticsearch的核心概念与应用,涵盖倒排索引原理、IK分词器使用、Java Client操作索引及查询等技能,帮助学员掌握高效搜索功能开发,适用于电商等高并发场景。
65 0
ES分布式搜索引擎入门
|
26天前
|
canal 缓存 关系型数据库
微服务原理篇(Canal-Redis)
本文介绍了ES索引同步的常见方案,重点讲解Canal+MQ数据同步机制。通过解析MySQL的binlog日志,Canal模拟slave伪装接入主库,实现增量数据捕获,并结合RabbitMQ保证消息顺序性地同步至Elasticsearch。同时探讨了缓存一致性问题,提出使用分布式锁(如Redis)控制并发写操作,避免双写不一致。还涵盖Redis持久化、集群模式、过期淘汰策略及缓存三剑客(穿透、雪崩、击穿)的解决方案,系统梳理了高并发场景下的数据同步与缓存保障技术体系。
56 0
 微服务原理篇(Canal-Redis)
|
26天前
|
存储 关系型数据库 MySQL
微服务原理篇(XXLJOB-幂等-MySQL)
本文介绍了XXL-JOB任务调度的优势、组成结构及热点商品缓存更新任务的实现,涵盖幂等性概念与解决方案,并深入解析了MySQL存储引擎特性、索引失效场景、回表与覆盖索引原理以及SQL调优和分库分表策略。
31 0
微服务原理篇(XXLJOB-幂等-MySQL)
|
26天前
|
关系型数据库 MySQL Java
开发环境搭建
工欲善其事,必先利其器。学习前请确保电脑内存16G以上(建议32G),推荐使用便携显示器分屏开发。需安装VMware虚拟机并导入CentOS 7系统(IP:192.168.101.68),配置IDEA、Maven、Git环境,拉取Gitee项目代码,创建数据库并导入SQL。苹果用户需用Docker安装MySQL。
37 0
开发环境搭建
|
25天前
|
存储 Java
Zookeeper序列化
本文从源码角度解析Zookeeper的序列化机制,重点分析jute包中的InputArchive和OutputArchive接口及其实现类,涵盖基本类型的读写、记录、向量与Map的序列化与反序列化过程,揭示其在网络通信与数据存储中的核心作用。
11 0
|
25天前
|
存储 算法 Java
持久化FileTxnLog
本文深入分析Zookeeper持久化机制,重点解读TxnLog与FileTxnLog源码。涵盖事务日志结构、append追加、truncate截断、commit提交等核心操作,解析日志格式、文件预分配及zxid管理,揭示数据存储与恢复原理。
20 0
|
25天前
|
负载均衡 算法 Dubbo
LoadBalance
本文深入解析Dubbo集群容错中的四大负载均衡算法:随机、轮询、最少活跃数与一致性哈希。结合数学分析与流程图,通俗讲解每种算法的实现原理与适用场景,重点剖析权重设计、活跃数统计及虚拟节点等核心机制,帮助理解源码背后的思维逻辑,并回应常见面试题。
33 0
|
25天前
|
XML Dubbo Java
Dubbo(缺省默认)
Dubbo缺省协议基于NIO和单一长连接,采用Hessian二进制序列化,适用于小数据量高并发场景。适合消费者多于提供者的分布式调用,不推荐用于传输大文件或大数据包。支持多连接配置与连接数限制,保障服务端稳定。
23 0
|
25天前
|
Dubbo 安全 Java
RMI
RMI协议基于JDK标准实现,采用阻塞短连接和Java默认序列化,支持多连接同步传输,适用于常规远程调用及与原生RMI互操作。需注意反序列化安全风险,建议升级commons-collections至安全版本。
55 0