cool-admin(midway版)后端定时任务:任务监控与失败重试机制

张开发
2026/4/7 2:17:39 15 分钟阅读

分享文章

cool-admin(midway版)后端定时任务:任务监控与失败重试机制
cool-admin(midway版)后端定时任务任务监控与失败重试机制【免费下载链接】cool-admin-midway cool-admin(midway版)一个很酷的后台权限管理框架模块化、插件化、CRUD极速开发永久开源免费基于midway.js 3.x、typescript、typeorm、mysql、jwt、vue3、vite、element-ui等构建项目地址: https://gitcode.com/gh_mirrors/co/cool-admin-midwaycool-admin(midway版)是一个基于midway.js 3.x构建的模块化后台权限管理框架其内置的定时任务模块提供了完善的任务调度、监控和失败处理机制帮助开发者轻松实现自动化业务流程。本文将详细介绍如何利用cool-admin的定时任务功能实现可靠的任务监控与智能重试策略。定时任务核心架构解析 cool-admin的定时任务系统主要通过TaskLocalService实现位于src/modules/task/service/local.ts。该服务采用单例模式设计通过CronJob实现精准的时间调度并提供完整的任务生命周期管理。系统核心组件包括任务存储使用TypeORM管理任务元数据(TaskInfoEntity)和执行日志(TaskLogEntity)调度引擎基于Cron表达式和间隔时间两种触发模式执行器负责任务的实际执行与结果记录监控机制实时跟踪任务状态与执行情况快速上手创建你的第一个定时任务 ⚡1. 基础任务配置通过addOrUpdate方法创建定时任务支持两种触发类型// Cron表达式类型 (每天凌晨2点执行) await taskLocalService.addOrUpdate({ name: 数据备份任务, taskType: 0, // 0表示Cron类型 cron: 0 0 2 * * *, service: backupService.run, status: 1 // 1表示启用任务 }); // 间隔类型 (每30分钟执行一次) await taskLocalService.addOrUpdate({ name: 数据同步任务, taskType: 1, // 1表示间隔类型 every: 1800000, // 间隔毫秒数 service: syncService.execute, status: 1 });2. 任务生命周期管理框架提供完整的任务控制功能启动任务taskLocalService.start(id)停止任务taskLocalService.stop(id)手动执行taskLocalService.once(id)删除任务taskLocalService.delete(ids)这些方法确保你可以在管理界面或代码中灵活控制任务状态。任务监控实时掌握执行状态 ️‍♂️cool-admin内置完善的任务监控机制通过以下方式实现全面监控1. 执行日志记录每次任务执行都会通过record方法记录详细日志// 记录成功执行 await this.record(task, 1, JSON.stringify(serviceResult)); // 记录失败信息 await this.record(task, 0, error.message);日志默认保留时间可通过配置task.log.keepDays调整确保系统不会因日志过多而占用过多存储空间。2. 任务状态跟踪任务实体TaskInfoEntity记录关键状态信息status任务状态(0-停止,1-运行)lastExecuteTime上次执行时间nextRunTime下次执行时间lockExpireTime任务锁定时间(防止并发执行)通过这些字段可以清晰掌握每个任务的当前状态和执行历史。失败重试机制保障任务可靠执行 虽然源码中未直接实现显式重试逻辑但可以通过以下方式构建可靠的失败处理机制1. 任务锁定与并发控制执行器使用乐观锁机制防止任务并发执行// 尝试获取任务锁 const result await this.taskInfoEntity .createQueryBuilder() .update() .set({ lastExecuteTime: currentTime, lockExpireTime: lockExpireTime, // 锁定5分钟 }) .where(id :id, { id: task.id }) .andWhere(lockExpireTime IS NULL OR lockExpireTime :currentTime, { currentTime, }) .execute(); // 如果获取锁失败直接返回 if (result.affected 0) { return; }2. 实现自定义重试策略结合任务日志系统可以实现灵活的重试机制// 在任务执行失败后根据失败次数决定是否重试 async function handleTaskFailure(taskId, error) { const failedCount await taskLogEntity.count({ where: { taskId, status: 0, createTime: MoreThan(moment().subtract(1, hour).toDate()) } }); if (failedCount 3) { // 最多重试3次 await taskLocalService.once(taskId); // 立即重试 } else { // 达到最大重试次数发送告警 await notificationService.send({ title: 任务执行失败, content: 任务${taskId}连续失败${failedCount}次 }); } }高级配置与最佳实践 1. 任务执行超时控制通过设置合理的lockExpireTime防止任务无限阻塞// 默认锁定5分钟可根据任务实际耗时调整 const lockExpireTime moment().add(5, minutes).toDate();2. 任务初始化与系统启动系统启动时会自动加载并启动所有状态为1的任务// 应用启动时初始化任务 async initTask() { this.logger.info(init local task....); const runningTasks await this.taskInfoEntity.findBy({ status: 1 }); // 遍历启动任务... }3. 分布式任务处理对于多实例部署场景可以通过共享数据库实现任务分布式调度确保同一任务在集群中只执行一次。总结cool-admin(midway版)的定时任务模块提供了强大而灵活的任务调度能力通过本文介绍的监控机制和失败处理策略可以构建高可靠的自动化业务流程。无论是简单的定时任务还是复杂的业务流程自动化cool-admin都能满足你的需求让开发变得更加高效简单。通过合理配置任务参数、实现自定义重试策略和利用完善的日志系统你可以确保关键业务任务的稳定执行为应用提供坚实的后台支持。【免费下载链接】cool-admin-midway cool-admin(midway版)一个很酷的后台权限管理框架模块化、插件化、CRUD极速开发永久开源免费基于midway.js 3.x、typescript、typeorm、mysql、jwt、vue3、vite、element-ui等构建项目地址: https://gitcode.com/gh_mirrors/co/cool-admin-midway创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

更多文章