分布式定时任务系列4:任务执行引擎设计续

工作流定时任务实战:从原理到分布式部署的完整指南 定时任务是自动化流程中的核心技术,它通过预设规则在特定时间触发业务逻辑,实现周期性任务的自动执行。其核心原理在于调度器按照Cron表达式或ISO 8601时间格式,精准控制任务触发时机。在技术价值上,定时任务解放了人力,确保了流程的准时与可靠,是构建自动化系统的基石。常见的应用场景包括数据同步、报表生成和日志清理等周期性作业。本文聚焦于工作流引擎中的定时任务集成,深入探讨了内置定时器与外部调度器两种主流方案,并结合Flowable、Quartz等工具,提供了从单机测试到微服务部署的完整实践路径,帮助开发者构 阅读详情

分布式定时任务系列3:任务执行引擎设计https://blog.youkuaiyun.com/weigeshikebi/article/details/123145716?spm=1001.2014.3001.5502在前面一节讨论中,设想基于xxl-job包装一个业务执行引擎出来,达到以下几个目的:

  • 并发问题

  • 重试机制

  • 统一的编程模型

  • 充分利用分布式系统的能力

系统设计

根据上面的几点,这节就想办法动手实现一个出来。

DB存储

由于目的是先把架子搭起来,而不用考虑其它性能方面,所以选用DB进行存储。初步的表设计如下

表主要字段解释如下

字段类型说明
task_typeint这个字段用于区分不同的业务/功能,比如短信发送,日终处理,权限清理等
sub_typeint这个字段的目的,是在同一个task_type下,如果有多个步骤都要进行定时任务处理,比如短信发送时:捞取符合条件的待发送账户,余额结算,短信发送等
task_statusint        任务状态,表示任务的执行过程,比如:INIT,PROCESSING,FAIL,SUCCESS等
flow_idstring用来跟踪同一个task_type下,多个sub_type的执行过程的辅助字段

类图

对于异步任务来说, 使用者理论上只关心业务逻辑,所以要尽量只关注业务代码,而其它的都交给引擎去处理。所以最好是提供一个接口,让使用者来实现业务逻辑

  • Task接口是任务接口,任何一个业务处理都需要实现这个接口:比如MsgTaskImpl,BalanceTaskImpl等
  • MsgTaskImpl,BalanceTaskImpl是具体的业务实现,如果需要使用异步任务引擎,需要实现Task接口
  • TaskEngine是异步任务的入口,也是引擎被刺的核心类,里面有个execute方法,业务处理调用此方法驱动任务执行
  • TaskFactory是任务的工厂类,维护任务类型与任务实现之间的关系:当注册一个任务时,调用register方法设置到内部的一个Map变量,TaskEngine执行时,通过getByType获取对应的task实现执行,也就做到动态扩展
  • TaskStatusEnum,是任务的状态,任务是由业务产生,初始状态为INIT,被引擎执行之后变成PROCESSING,执行完成后,根据结果变为终态:SUCCESS/FAIL
  • InitializingBean,Spring的实例化接口,用它来将task实现注册到TaskFactory中
  • JobHandler,里面配置异步任务的规则,@XxlJob注解对应xxl-job平台任务

执行流程图

现在来看下一个任务执行的整体顺序,假设是短信发送的业务 

  • 业务系统产生异步任务,存储到DB,调用task引擎提供的接口
  • xxl-job定时任务触发,通过taskEngine扫描到对应的处理任务
  • 将任务从INIT更新为PROCESSING,表示正在处理中
  • taskEngine根据taskType,subType从TaskFactory中获取对应的处理实例,执行对应的业务逻辑:业务逻辑由task实现的业务处理编写
  • 执行完成,更新任务状态为终态:如果成功为SUCCESS,失败为FAIL

并发的处理

这里要考虑并发的问题,即多台实例执行同一个任务时,只能有一个线程在执行,自然而然想到锁,对于分布式的情况,可以用分布式锁来控制,所以这里还需要依赖redis之类的做分布式锁

异常的处理

这里还要考虑,如果是业务处理发生异常,任务状态该怎么处理?直接更新为FAIL,是最简单且直接的处理,但是如果异常不是业务异常,是网络抖动之类的,是不是应该考虑兼容,做到自动重试?所以这里面还要涉及到重试的处理

基于此,上面的类图,应该增加对redis的依赖

且最终和执行逻辑为

JeecgBoot定时任务实战:从Quartz配置到分布式集群调度 本文详细介绍了JeecgBoot定时任务的实战应用,从基础的Quartz配置到分布式集群调度的高级特性。通过具体代码示例和配置解析,帮助开发者掌握定时任务的创建、优化和故障排查技巧,特别适合在微服务架构下实现高效、可靠的分布式任务调度。 阅读详情

相关推荐

多实例下的定时任务如何避免重复执行——分布式定时任务

前面的章节,用户通过绑定手机号的注册为会员,并可以补充完个人信息,比如姓名、生日等信息,拿到用户的生日信息之后,就可以通过会员生日信息进行营销,此处就涉及到定时任务执行营销信息推送的问题。本篇就带你走入微服务下的定时任务的构建问题。 定时任务选型 常见的定时任务的解决方案有以下几种: 右半部分基于 Java 或 Spring 框架即可支持定时任务的开发运行,左侧部分需要引入第三方框架支持。针对不...

东南草堂 8044

分布式定时任务系列3:任务执行引擎设计

分布式定时任务系列3:任务执行引擎设计

weigeshikebi的博客 1069

task-engine:任务引擎是一个可以帮助我们轻松执行各种异步任务的库

任务引擎是一个可以帮助我们轻松执行各种异步任务的库。 维基 有关更多详细信息,请访问我们的。

设计一个任务处理引擎(一)

业务说明: 在工作中,业务上涉及到大量的定时任务,我公司目前采用的是当当的ElasticJob分布式定时任务框架搭建的,由于业务已经成型,在定时任务上改造不太合适,最终决定自己设计一套任务处理框架;用户监控、调整实施运行的每一个任务; 业务场景 我们的业务场景主要是: 一个公司 + 多个账户 ,每个账号下的拥有若干个任务;类似于下面的构图; 设计原因 由ElasticJob控制若干台机器执行任务,由于Elasticjob的局限性,操作不到具体的任务1、任务2等等数据, 如:监控运行时长、强制中断,又或者运

Alecor的博客 1083

execute-engine:基于Ansible API的任务执行引擎,支持adhoc和playbook两种任务的执行

Distribute任务分发和Execute-Engine任务执行 一:项目介绍 (一) 功能 Distribute主要工作是完成ansible任务拆分,将拆分后的任务推送到Kafka消息队列中,并且基于task_id、ips、ip获取任务的执行进度和执行结果 Execute-Engine主要工作是完成Kafka指令集消费,执行指令集任务,将任务结果写入到MySQL数据库中 (二) Distribute和Execute-Engine数据交互方式 在上图中,Distribute服务为两个docker容器,目的是确保服务的高可用性。在其中一个Distribute服务中,安装了NFS,基于轻量级NFS网络文件系统,将从Gitlab上拉取的项目文件(需要配置公钥,避免输入用户名和密码),共享给另外一个Distribute容器,同时也共享给所有的Execute-Engine执行引擎,执行引擎可以执行

three.js中如何高效加载并播放GLB格式的3D动画

本文详细介绍了在three.js中高效加载并播放GLB格式3D动画的最佳实践。通过对比GLB与GLTF格式的优势,提供从环境搭建、模型加载到动画控制的完整解决方案,并分享性能优化技巧和常见问题排查方法,帮助开发者提升3D动画项目的开发效率和用户体验。

weixin_27890975的博客 362

任务流程引擎设计

一、前言         前段时间做的一块东西,涉及到任务的拆解与依赖,由于时间紧急,当时采用的硬编码办法解决,现在终于回过神来,于是设计成一个“小框架”。 二、问题描述         进行大数据分析,用Java调用Sqoop接口将数据导入Hadoop,然后...

dong_lxkm的博客 5518

采用MPU6050的手势遥控器

随着社会的发展与进步,电子产品日益更新,个人家庭迎来了越来越多的智能家电。然而,现在的智能电子设备产品的遥控器多数都是按键形的。操作繁琐不直观,学习成本大。并且对于有老人小孩的家庭,给他们的操作带来了巨大的障碍。手势遥控器是指利用简单的手势来指挥电子设备,获得便捷的操作体验。让家庭成员都可以享受科技发展带来的福利。MPU6050是一个运动传感器,内置陀螺仪,再由电子设备利用判断结果做出相应的响应即...

Sakura的博客小站 6602

基础课17——任务问答引擎

任务问答引擎在智能客服系统中负责多轮对话的对话流设计、意图的管理、任务流的执行等功能。能够高效地进行意图识别与任务解析,实现多轮对话的流程设计,并驱动多轮会话任务的高效完成。

2202_75469062的博客 1430

让Qt程序适配高分辨率屏幕,解决软件界面错乱异常

前期使用Qt开发一个登录模块一直使用很好。最近在一台新电脑上使用时发现排版混乱。这个问题很普遍,主要原因是旧软件对高清显示器的适配不当造成的。新电脑使用的是4K屏,win10系统自动进行了175%的缩放。

cihron的博客 1万+

PDDL入门

PDDL的组成部分 Objects:对象,世界上我们感兴趣的事物。 Predicates:谓词,我们感兴趣的事实(例如对象的属性),可以为真,也可以为假。 An initial state:初始化状态,我们开始所处的世界状态,即开始时为真的事物。 Goal specification:目标状态,我们想要结束的世界的状态,即我们希望最终成为真实的事情。 Actions/Operators:动作/操作,改变世界状态的方式,即发生的事情改变了事实。 PDDL语法 PDDL 文件的扩展名通常是.pddl 要

工控小白2021的博客 4821

分布式定时任务系列8:XXL-job源码分析之远程调用

【代码】分布式定时任务系列8:XXL-job源码分析之远程调用。

weigeshikebi的博客 2087

HFSS入门学习笔记——微带一分四功分器的设计与仿真

功率分配器是将输入信号功率分成相等或不相等的几路功率输出的一种多端口无源微波网络,用于功率分配和功率合成。工程上常用的微带功分器有T型功分器和威尔金森功分器。经典的威尔金森功分器有几个缺点:①、多应用于低频段,高频段时,波长会与隔离电阻的尺寸相比拟,此时需要考虑电阻的分布参数效应;②、大功率应用时,隔离电阻的耗散功率要很大,因此隔离电阻的体积也会比较大。

weixin_42126696的博客 2万+

设计分布式任务执行引擎:从单节点到高可用架构的完整实现

当系统日均任务量突破100万、节点规模超过50台服务器时,传统定时任务框架往往暴露出致命缺陷:任务丢失率高达3%、节点负载差10倍、故障恢复需要人工介入2小时以上。本文将从零构建一个支持**千万级任务调度**、**秒级故障转移**、**动态资源调度**的分布式任务执行引擎,彻底解决这些痛点。 读完本文你将掌握: - 分布式任务引擎的核心架构设计(含3大创新点) - 任务分发的4种算法对比及实现代...

gitblog_00390的博客 331

从 CDS 接口到 ABAP 运行时,深入理解 SAP RAP Custom Entity

CDS Custom Entity 是一种非 SQL、瞬态的 CDS 实体,不依赖 HANA SQL 读取数据,而是通过 ABAP 类实现查询逻辑(如 RFC、OData、BAPI 等)。它在 CDS 层定义数据契约(字段、键、关联、注解),由 @ObjectModel.query.implementedBy 指向实现 IF_RAP_QUERY_PROVIDER~SELECT 的类,真正执行数据获取。适用于无法用 SQL 表达的数据源,如远程系统或 API。其核心是“接口 + 实现”模式,运行时由 RAP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 171

智算中心建设项目初步设计方案

本项目面向区级政府、智算中心及文旅从业者,聚焦某区智算中心一期建设,响应数字经济与智慧城市建设政策,推动文旅产业升级。遵循统筹规划、数据驱动原则,目标打造智慧文旅样板。建设内容涵盖云网数据底座(以租代建)、数据中台(全生命周期管理)、智慧文旅平台(含“一机游”电商)及气象监测等配套,采用前后端架构与低代码开发,强化三级等保与纵深防御,实现安全可控。方案融合多类资源目录,提供从设计到运营的完整技术支撑,助力区域智算与文旅深度融合。

cdfunlove的博客 111

AI任务执行引擎设计:从异步任务到分布式调度的工程实践

AI任务执行引擎是企业级数字员工的核心基础设施。与普通后端任务不同,AI任务的执行链路更长、状态更复杂、异常更频繁,对异步处理、状态管理和分布式调度提出了更高要求。本文从工程实现角度,拆解一套可落地的AI任务执行引擎架构,覆盖任务编排、状态持久化、分布式调度、异常恢复四个核心模块。

2501_93684580的博客 555

二维光子晶体禁带的遗传优化算法实现

二维光子晶体禁带的遗传优化算法MATLAB源代码 光子晶体中因周期性结构而存在的频率禁带称为光子禁带,光子禁带的存在是光子晶体具有广泛应用前景的重要原因。 禁带越大,可控光的频带也越宽,因此如何设计合适的晶体结构以获得大的光子禁带一直是研究和应用的重点与热点。 给大家讲解在平面波展开法的基础上,使用遗传算法寻找具有最大光子禁带的二维光子晶体结构。 %-------------------------------------------------------------------------- % Ph

m0_53407570的博客 583

分布式定时任务系列5:XXL-job中blockingQueue的应用

分布式定时任务系列1:XXL-job安装分布式定时任务系列2:XXL-job使用分布式定时任务系列3:任务执行引擎设计分布式定时任务系列4:任务执行引擎设计续

weigeshikebi的博客 1780

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

分布式定时任务系列6:XXL-job触发日志过大引发的CPU告警

xxl-job,日志过大,故障

weigeshikebi的博客 3892

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

分布式定时任务系列12:XXL-job的任务触发为什么是死循环?

‌JDK Timer‌是Java开发工具包(JDK)中提供的一个定时器工具,用于在后台线程中安排将来执行的任务。它可以安排任务为一次性执行,或者以固定间隔重复执行。Timer类自jdk1.3就引入,作者是大名鼎鼎的Josh Bloch(是google的首席JAVA架构师)。优点简单易用,适合简单的定时任务需求。线程安全,多个线程可以共享一个Timer对象而无需外部同步。‌缺点单一Timer对象共享一个线程,如果任务执行时间较长,会影响后续任务的执行。不适合高并发或高性能要求的场景。‌替代方案。

weigeshikebi的博客 1631

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

工作流中定时任务设计:从Spring Scheduled到分布式架构演进

定时任务是自动化流程中的关键技术组件,其核心原理在于基于预设时间规则触发特定操作。在技术价值层面,它实现了业务流程的自动化调度与执行,有效提升系统运行效率。从应用场景来看,定时任务广泛应用于数据同步、日志清理、状态检查等业务环节。随着系统架构演进,定时任务从单体的Spring @Scheduled和Quartz方案,发展到微服务架构下的分布式调度需求,需要解决集群协调、幂等性、状态管理等工程挑战。本文将结合工作流引擎集成实践,探讨如何构建健壮的定时任务框架,其中涉及**幂等性**设计和**分布式锁**应用等

weixin_33796205的博客 389

企业级分布式定时任务系统:cron-job.org 高可用架构与生产实践

cron-job.org 是一款开源的分布式定时任务管理系统,专为需要高可靠性和可扩展性的企业环境设计。该系统采用现代化微服务架构,支持大规模任务调度、实时监控和自动化运维,能够帮助企业实现任务调度自动化、提升运维效率并降低管理成本。本文将从技术架构、部署实践到生产环境优化,全面解析这款企业级定时任务系统的核心能力。 ## 技术挑战与痛点分析 在现代企业IT环境中,定时任务管理面临诸多挑战:

gitblog_01057的博客 1106

分布式定时任务系列13:死循环是任务触发的银弹?

Executors的核心作用是封装线程池的创建逻辑固定大小的线程池(Fixed Thread Pool)可缓存的线程池(Cached Thread Pool)单线程的线程池(Single Thread Pool)周期性任务调度线程池(Scheduled Thread Pool)这些线程池分别适用于不同的场景,比如任务数量固定、任务数量不确定、需要单线程执行、或需要定时执行任务等。

weigeshikebi的博客 1108

分布式定时任务系列10:XXL-job源码分析之路由策略

** FIRST(第一个):固定选择第一个机器;*//** (最后一个):固定选择最后一个机器;*//** (轮询):;*//** (随机):随机选择在线的机器;*//** (一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。*//** (最不经常使用):使用频率最低的机器优先被选举;*//** (最近最久未使用):最久未使用的机器优先被选举;*//** (故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;

weigeshikebi的博客 2123

akka现有的分布式定时任务框架总结

Openjob 是一个基于 Akka 架构的新一代分布式任务调度框架,支持多种定时任务、延时任务、工作流设计,采用无中心化架构,底层使用一致性分片算法,支持无限水平扩容。k-job 是一个基于 PowerJob 重写和重构的分布式任务框架,支持定时任务、负载均衡和 OpenAPI 异步调用。如果你正在寻找一个高性能、支持多种任务类型(包括定时任务、延时任务、工作流设计)的分布式任务调度框架,延时任务:基于 Redis 实现高性能延时任务,底层实现任务多级存储,提供丰富的统计和报表。

红豆和绿豆的博客 1330
上一篇: java多线程异常丢失
下一篇: 故障解决之代码更新了,请求不生效
kobe_t
博客等级 码龄15年 1162粉丝 149原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值