任务执行与调度
引用文件
本文引用的文件
- yudao-module-task/pom.xml
- TaskService.java
- TaskDO.java
- TaskMapper.java
- TaskController.java
- TaskRedisDAO.java
- TaskRegionRedisDAO.java
- TaskModelRedisDAO.java
- TaskRuleRedisDAO.java
- TaskBpmVariable.java
- TaskBpmService.java
- TaskBpmServiceImpl.java
- TaskNoBpmServiceImpl.java
- TaskDeviceNoBpmServiceImpl.java
- FolwAppTaskDeviceVO.java
- DeviceHeartBeatRes.java
- KafkaAutoConfiguration.java
- KafkaProperties.java
- KafkaWebSocketMessageConsumer.java
- RuleBusinessLimitConsumer.java
- AsyncMessageStatusEnum.java
- ExportRejectedExecutionHandler.java
- create_tables.sql
- ruoyi-vue-pro.sql
- README.md
目录
简介
本文件面向“任务执行与调度系统”,围绕任务调度机制(一次性、周期性、定时)、任务生命周期(创建、参数校验、执行状态跟踪、结果反馈)、监控与告警(进度、异常、重试、超时)、任务与设备关联(按设备分组、筛选、优先级)、任务API与批量能力、以及与Kafka的消息队列集成与异步处理进行系统化说明。文档同时提供架构图、序列图、流程图与最佳实践建议,帮助 技术与非技术读者快速理解并高效运维。
项目结构
任务模块采用多模块聚合结构,核心位于 yudao-module-task,包含API与业务实现两部分;基础设施模块提供定时任务表与日志表;设备模块提供心跳与任务下发能力;框架层提供Kafka、WebSocket、通用枚举与MQ配置等支撑。
图表来源
章节来源
核心组件
- 控制器与服务
- 管理端控制器:负责任务的创建、更新、删除、分页查询、导出、审批流操作等。
- 任务服务接口与实现:支持带/不带BPM两种模式,提供任务分页、设备关联、版本号更新、取消更新等能力。
- 数据对象与持久层
- 任务DO:定义任务字段、状态、类型、版本号、流程状态等。
- Mapper:封装分页查询、条件过滤、角色权限关联查询等。
- 缓存层
- 任务缓存、区域缓存、规则缓存、型号缓存:基于Redis的随机过期与穿透保护策略,提升读性能。
- BPM与变量
- BPM服务接口与实现:创建/取消流程、处理流程结果。
- BPM变量:封装任务提交审批所需的业务变量。
- 设备与心跳
- 心跳返回结构:包含任务列表,驱动设备侧任务下发。
- MQ与WebSocket
- Kafka自动配置:统一错误处理、重试、不可重试异常、日志输出。
- Kafka属性配置:主题命名规范。
- WebSocket Kafka消费者:跨节点广播消息发送。
- 异步与线程池
- 异步消息状态枚举:统一状态管理。
- 导出拒绝策略:队列满时抛出服务异常,提示用户稍后再试。
章节来源
- TaskController.java
- TaskService.java
- TaskDO.java
- TaskMapper.java
- TaskRedisDAO.java
- TaskRegionRedisDAO.java
- TaskModelRedisDAO.java
- TaskRuleRedisDAO.java
- TaskBpmService.java
- TaskBpmVariable.java
- DeviceHeartBeatRes.java
- KafkaAutoConfiguration.java
- KafkaProperties.java
- AsyncMessageStatusEnum.java
- ExportRejectedExecutionHandler.java
架构总览
任务执行与调度系统由“控制层-服务层-数据访问层-缓存层-设备层-消息队列”构成,形成闭环:管理员通过控制台创建/更新任务,服务层完成参数校验与状态流转,持久层落库,缓存层加速读取;设备侧通过心跳接口获取任务并执行;MQ负责异步解耦与广播;BPM提供审批流能力。
图表来源
- TaskController.java
- TaskService.java
- TaskMapper.java
- TaskRedisDAO.java
- DeviceHeartBeatRes.java
- KafkaAutoConfiguration.java
- KafkaWebSocketMessageConsumer.java
- create_tables.sql
详细组件分析
任务生命周期与调度策略
- 一次性任务:通过控制器创建,服务层完成参数校验与状态设置,持久化后可立即下发给设备。
- 周期性/定时任务:系统提供定时任务表与日志表,结合框架层Quartz或Spring Task(仓库中体现为定时任务基础设施),可将任务执行纳入调度器统一管理。
- 执行时机控制:设备心跳接口返回任务列表,驱动设备侧按需执行;也可通过MQ异步触发。
图表来源
- TaskController.java
- TaskService.java
- TaskMapper.java
- DeviceHeartBeatRes.java
- KafkaAutoConfiguration.java
章节来源
任务与设备关联与筛选
- 按设备分组:通过区域缓存与型号缓存,将任务与区域/型号建立关联,查询时可快速定位目标设备集合。
- 按条件筛选:任务DO包含筛选类型(品牌/机型、渠道、MAC导入),Mapper提供多条件分页查询。
- 任务下发:设备心跳返回任务列表,驱动设备侧执行。
图表来源
- TaskDO.java
- TaskModelRedisDAO.java
- TaskRegionRedisDAO.java
- TaskRedisDAO.java
- DeviceHeartBeatRes.java
章节来源
- TaskDO.java
- TaskMapper.java
- TaskModelRedisDAO.java
- TaskRegionRedisDAO.java
- TaskRedisDAO.java
- DeviceHeartBeatRes.java
任务监控与告警、重试与超时
- 监控与日志:定时任务表与日志表记录任务执行状态、耗时、结果等,便于审计与回溯。
- 异常与重试:Kafka自动配置提供统一错误处理、重试次数与不可重试异常分类,避免消息堆积。
- 超时处理:BPM任务超时处理(提醒/自动同意/自动拒绝)可借鉴到任务执行超时场景。
- 状态管理:异步消息状态枚举统一管理待处理、成功、失败、忽略等状态。
图表来源
章节来源
任务API与批量操作
- 管理端API
- 创建:POST /task/task/create
- 更新:PUT /task/task/update
- 删除:DELETE /task/task/delete
- 查询:GET /task/task/get
- 分页:GET /task/task/page
- 导出:GET /task/task/export-excel
- 审批流:PUT /task/task/bpm/create、PUT /task/task/bpm/cancel、PUT /task/task/cancel、PUT /task/task/bpm/cancel-all
- 批量能力
- 分页查询支持角色权限过滤与设备数量统计联动。
- 导出接口支持无分页导出(设置页大小为不限)。
- 缓存穿透保护:任务缓存提供空值短命缓存,避免缓存穿透。
章节来源
与Kafka的集成与异步处理
- 主题配置:KafkaProperties定义了设备变更、应用安装列表、黑名单回调等主题。
- 消费端:Kafka自动配置提供统一错误处理、重试与不可重试异常,日志记录Topic/分区/偏移等上下文。
- 广播:WebSocket Kafka消费者通过不同消费者组ID实现广播消费,向在线会话推送消息。