当前位置: 首页 > wzjs >正文

炫酷网站有哪些网站代码优化有哪些

炫酷网站有哪些,网站代码优化有哪些,做国外网站做什么内容好,东营市城市和建设管理局网站引言 任务调度是现代后端应用中的常见需求,无论是定时数据清理、报表生成还是系统维护,都需要可靠的任务调度机制。NestJS通过nestjs/schedule包提供了强大的任务调度功能,但官方文档主要关注静态任务配置。本文将带你探索如何在NestJS中实现…

引言

任务调度是现代后端应用中的常见需求,无论是定时数据清理、报表生成还是系统维护,都需要可靠的任务调度机制。NestJS通过@nestjs/schedule包提供了强大的任务调度功能,但官方文档主要关注静态任务配置。本文将带你探索如何在NestJS中实现动态的Cron任务管理,包括添加、修改和移除任务。

核心概念

1. @nestjs/schedule模块

@nestjs/schedule是NestJS官方提供的任务调度模块,基于流行的node-cron库。它提供了:

  • @Cron()装饰器:声明静态Cron任务
  • SchedulerRegistry:用于管理已注册的任务
  • 间隔任务和超时任务支持

2. 动态任务 vs 静态任务

  • 静态任务:在应用启动时通过装饰器定义,生命周期与应用一致
  • 动态任务:可在运行时添加、修改和删除,灵活性更高

实现步骤

1. 基础配置

首先安装依赖:

npm install @nestjs/schedule

然后在AppModule中导入:

import { ScheduleModule } from '@nestjs/schedule';@Module({imports: [ScheduleModule.forRoot()],
})
export class AppModule {}

2. 创建动态任务服务

核心服务DynamicTaskService封装了所有动态任务操作:

@Injectable()
export class DynamicTaskService {constructor(private schedulerRegistry: SchedulerRegistry) {}// 添加任务addCronJob(name: string, cronTime: string, callback: () => void) {const job = new CronJob(cronTime, callback);this.schedulerRegistry.addCronJob(name, job);job.start();}// 检查任务是否存在doesCronJobExist(name: string): boolean {try {this.schedulerRegistry.getCronJob(name);return true;} catch {return false;}}// 更新任务updateCronJob(name: string, cronTime: string, callback: () => void) {this.deleteCronJob(name);this.addCronJob(name, cronTime, callback);}// 删除任务deleteCronJob(name: string) {this.schedulerRegistry.deleteCronJob(name);}// 获取所有任务getCronJobs() {return Array.from(this.schedulerRegistry.getCronJobs().entries()).map(([name, job]) => ({name,cronTime: job.cronTime.source,running: job.running,lastExecution: job.lastDate(),}));}
}

3. 创建任务管理API

通过REST API暴露任务管理功能:

@Controller('tasks')
export class TasksController {constructor(private readonly taskService: DynamicTaskService) {}@Post()createOrUpdateTask(@Body() body: { name: string; cronTime: string }) {const taskLogic = () => console.log(`Executing ${body.name}`);if (this.taskService.doesCronJobExist(body.name)) {this.taskService.updateCronJob(body.name, body.cronTime, taskLogic);return { message: 'Task updated' };} else {this.taskService.addCronJob(body.name, body.cronTime, taskLogic);return { message: 'Task created' };}}@Get()listTasks() {return this.taskService.getCronJobs();}@Delete(':name')removeTask(@Param('name') name: string) {this.taskService.deleteCronJob(name);return { message: 'Task deleted' };}
}

实际应用示例

1. 创建每日数据备份任务

POST /tasks
{"name": "daily-backup","cronTime": "0 3 * * *"  # 每天凌晨3点执行
}

2. 修改为每周备份

POST /tasks
{"name": "daily-backup","cronTime": "0 3 * * 1"  # 改为每周一凌晨3点
}

3. 查看所有任务

GET /tasks# 返回示例
[{"name": "daily-backup","cronTime": "0 3 * * 1","running": true,"lastExecution": "2023-05-15T03:00:00.000Z"}
]

高级主题

1. 任务持久化

内存中的任务会在应用重启后丢失,解决方案:

// 启动时从数据库加载任务
async onApplicationBootstrap() {const savedTasks = await this.taskRepository.find();savedTasks.forEach(task => {this.addCronJob(task.name, task.cronTime, this.getTaskLogic(task));});
}

2. 分布式环境考虑

在多实例部署中,需要:

  • 使用分布式锁确保任务只在一个实例执行
  • 考虑使用专门的作业队列系统(如BullMQ)
  • 或者使用数据库标记防止重复执行

3. 错误处理与监控

增强健壮性:

addCronJob(name: string, cronTime: string, callback: () => void) {try {const job = new CronJob(cronTime, () => {try {callback();} catch (error) {this.logger.error(`Job ${name} execution failed`, error.stack);}});// ...其余代码} catch (error) {this.logger.error(`Invalid cron pattern: ${cronTime}`);throw new BadRequestException('Invalid cron pattern');}
}

总结

通过@nestjs/scheduleSchedulerRegistry,我们可以在NestJS中实现灵活的动态任务管理。关键点包括:

  1. 使用CronJob类创建动态任务
  2. 通过SchedulerRegistry管理任务生命周期
  3. 提供清晰的API进行任务CRUD操作
  4. 考虑持久化和分布式场景

这种模式非常适合需要动态调整任务调度策略的应用,如CMS系统、数据分析平台等。根据你的具体需求,可以进一步扩展错误处理、监控和持久化功能。


文章转载自:

http://tPFyvtPn.dyzbt.cn
http://ntvhkj3J.dyzbt.cn
http://cNR7GeCh.dyzbt.cn
http://Uc8d67pJ.dyzbt.cn
http://TF9UHA2I.dyzbt.cn
http://89lpyfUe.dyzbt.cn
http://ROTNeavU.dyzbt.cn
http://FdC0sy4y.dyzbt.cn
http://hvgW6m5i.dyzbt.cn
http://jgEH7zfc.dyzbt.cn
http://SELMVLIc.dyzbt.cn
http://8GZ1nZtr.dyzbt.cn
http://UNqoaTUY.dyzbt.cn
http://aTAhWEO2.dyzbt.cn
http://kLHfOasp.dyzbt.cn
http://UoB04WFQ.dyzbt.cn
http://T73B7NJ9.dyzbt.cn
http://9w7eocrN.dyzbt.cn
http://uus2WdOG.dyzbt.cn
http://wN6jFvD0.dyzbt.cn
http://CDk0eJtg.dyzbt.cn
http://Mtn40tn8.dyzbt.cn
http://JbhiJxSm.dyzbt.cn
http://Di38F86S.dyzbt.cn
http://cPdulENY.dyzbt.cn
http://Oen9OaoK.dyzbt.cn
http://cmwf62g9.dyzbt.cn
http://Y2XCY8LB.dyzbt.cn
http://687FmrTV.dyzbt.cn
http://mGJvSCDe.dyzbt.cn
http://www.dtcms.com/wzjs/647663.html

相关文章:

  • 大型网站 div工信部网站备案电话
  • 网站更换主机注意单页网站制作需要多少钱
  • linux主机上传网站群晖做网站域名
  • 如何提升网站加载速度浩博建设集团网站
  • 什么是网站推广优化谷歌推广运营
  • c 网站开发代码响应式网站设计的规范
  • 智能建站软件哪个好建站行业发展
  • 网站开发前端和后端怎么连接石景山网站建设公司排行
  • 企业建站用什么主机模板制作安装
  • 犀牛云网站建设也是网络品牌建设和推广的基础
  • 官方做任务网站庆阳市门户网
  • 莱州网站建设服务网站开发需求确认书
  • 宣讲网站建设国外哪个网站可以做外贸比较好
  • 南昌seo网站为什么只有建设网站打不开
  • 昆明做网站建设价位网站开发公司飞沐
  • 沭阳做网站新闻源网站做黑帽seo
  • 成都哪家做网站网站设计怎么验收
  • 巩义网站建设与制作WordPress 会员空间插件
  • 网站建设致谢太原网站建设世纪优创
  • 网站开发兼容问题苏州前程无忧官上做网站
  • 承德市宽城县建设局网站微信小视频网站开发
  • 自助广告位网站源码wordpress怎么换头像不显示
  • 10类地方网站 总有适合你做的做网站克隆
  • 网站每个月8g流量礼物说wordpress
  • 南昌网站建设公司昵图网免费素材图库官网
  • 电商网站建设费用android简单开发app实例代码
  • 网站建设哪家服务态度好从事网站开发的想考研
  • 钢管公司网站建设网站建设招聘网
  • 福建省建设执业继续教育网站汕头seo网站管理
  • 哪个小说网站防盗做的好如何提高alexa排名