Nestjs框架: nestjs-schedule模块中的三类定时任务

一文带你弄懂nestjs任务调度 nestjs任务调度 阅读详情

三类定时任务

  • task schedule 要做的三件事情
    • 添加定时任务
    • 删除定时任务
    • 获取所有定时任务的状态
  • 什么类型的任务适合使用 task.schedule 模块
    • 周期性任务:如每天、每小时、每周执行的任务,适合使用 taskschedule 模块
      • 每天看签到任务是否完成, 未完成则给用户添加 task queue 的消息
      • 这是周期性任务 和 task queue 配合的示例
    • 简单任务:像系统状态或接口状态的检查,可通过发起请求判断,将响应数据存储到数据库方便后续读取
    • 轻量级任务:任务不常执行且任务量不大的情况,适合使用 task schedule (非高并发任务)
  • task schedule 不适合做什么
    • 给用户发送指定日期某一分,某一秒的消息
  • 如果是大量高并发的任务,使用 task queue
    • task queue 可以实现给用户发送指定日期某一分,某一秒的消息
    • task queue 在 nestjs 中有一个 nestjs bull + redis 的方案
    • task queue 其他方案: RabbitMQ,MessageMQ, Kafka 方案

合理规划 tasks 定时任务

  • common
    • cron
      • tasks
        • log-db-cron.service.ts
        • index.ts
      • tasks.module.ts
      • tasks.service.ts

1 ) cron/tasks/log-db-cron.service.ts

import { Injectable } from '@nestis/common';
import { Cron } from '@nestjs/schedule';
import { SshService } from '@/utils/ssh/ssh.service';

@Injectable();
export class LogDbCronService {
	constructor(private sshService: sshService) {}
	
	@Cron('0 * 0 * *', {name: 'logdb-cron'})
	handleCron(){
		//备份:连接到MongoDB并导出对应的db中的collections的数据
		//滚动记录:删除已有的collections的数据
		//1.删除当前collections中的已备份数据
		//2.之前备份的collections->对比collection备份的时间,如果超过t天/hours的规则,则删除
		const containerName = 'mongo-mongo-1';
		const uri='mongodb: //root: example@localhost: 27017/nest-logs';
		const now = new Date();
		const collectionName = 'log';
		const outputPath =`/tmp/logs-${now.getTime()}`;
		const hostBackupPath = '/srv/logs';
		const cmd =`docker exec -i ${containerName} mongodump --uri=${uri} --collection=${collectionName} --out=${outputPath}`;
		const cpCmd =`docker cp ${containerName}:${outputPath} ${hostBackupPath}`;
		await this.sshService.exec(`${cmd} && ${cpCmd}`)
		await this.sshService.exec(`ls-la ${hostBackupPath}`);
		const delCmd = `find ${hostBackupPath} -type d -mtime +30 -exec rm
		-rf {}\\;`;
		await this.sshService.exec(delCmd)
		const res = await this.sshService.exec(`ls-la ${hostBackupPath}`);
		console.log('~ TasksService ~ handleCron ~ res:', res);
	}
}

2 ) cron/tasks/index.ts

import { Provider } from '@nestjs/common';
import { LogDbCronService } from './tasks/log-db-cron.service';

export const CronProviders: Provider[] = [LogDbCronService];

3 ) tasks.module.ts

$ nest g mo common/cron/tasks --no-spec --flat -d
生成 nest g mo common/cron/tasks.module.ts

import { Module } from '@nestjs/common';
import { TasksService } from './tasks.service';
import { ScheduleModule } from '@nestjs/schedule';
import { CronProviders } from './tasks/index';


@Module({
	imports: [ScheduleModule.forRoot()],
	providers: [TasksService, ...CronProviders],
	exports: [TasksService],
})

export class TasksModule {}

4 ) task.service.ts

import { Injectable, Logger } from '@nestjs/common';
import { SchedulerRegistry } from '@nestjs/schedule';
import { CronJob } from 'cron';

@Injectable()
export class TasksService {
	logger = new Logger('TasksService');
	constructor(private schedulerRegistry: SchedulerRegistry){}

	//添加定时任务
	addCronJob(name: string, cronTime: string, cb:()=> void): void {
		const job = new CronJob(cronTime, cb);
		this.schedulerRegistry.addCronJob(name, job);
		job.start();
		this.logger.log(`Job ${name} added and started`);
	}

	// 删除定时任务
	deleteCronJob(name: string): void {
		this.schedulerRegistry.deleteCronJob(name);
		this.logger.warn(`Job ${name} deleted`);
	}

	// 获取所有的定时任务的状态
	getCrons() {
		const jobs = this.schedulerRegistry.getCronJobs();
		jobs.forEach((value, key) => {
			let next;
			try {
				next = value.nextDate().toJSDate();
			} catch(e) {
				next = 'error: next fire date is in the past!';
			}
			this.logger.log(`job: ${key} -> next: ${next}`); // key 是 id, next 下一次执行任务的时间
		});
	}
}

这是控制定时任务的 添加,删除,获取所有的定时任务

5 ) 使用

  • 在某个模块,比如 auth.mdoule.ts 导入 TasksModule

    import { Module } from '@nestjs/common';
    import { TasksModule } from '@/common/cron/tasks.module';
    
    @Module({
    	imports: [
    		TasksModule,
    	]
    })
    
    export class AuthModule {}
    
  • 之后再 auth.controller.ts 导入

    import { Module, Get } from '@nestjs/common';
    import { TasksService } from '../../common/cron/tasks.service';
    
    @Controller('auth');
    export class AuthController {
    	constructor(
    		private tasksService: TasksService
    	) {}
    
    	@Get('add-job')
    	getAddJob() {
    		// 每分钟执行一次 写死的任务名称
    		this.tasksService.addCronJob('test', '*****', () => {
    			console.log('hello schedule job');
    		});
    		return 'created';
    	}
    
    	@Get('delete-job')
    	deleteJob() {
    		this.tasksService.deleteCronJob('test'); // 写死的任务名称
    		return 'deleted';
    	}
    
    	@Get('get-jobs')
    	getJobs() {
    		this.tasksService.getCrons();
    		return 'get jobs';
    	}
    }
    
  • 以上都是简单的测试,调用对应的 api 即可测试

Node.js-nodejs定时调度任务 nodejs定时调度任务 立即下载

相关推荐

schedule:Nest框架的调度模块(node.js):alarm_clock:

一个渐进式的框架,用于构建高效且可扩展的服务器端应用程序。 描述 基于软件包的计划模块。 安装 $ npm i --save @nestjs/schedule 快速开始 支持 Nest是MIT许可的开源项目。 得益于赞助商和出色支持者的支持,它可以发展壮大。 如果您想加入他们,请。 保持联系 作者 网站-https: 执照 Nest已。

一篇文章学会在 NestJS 中优雅实现定时任务,Cron Task 最佳实践与技巧

NestJS 是一个强大的Node.js框架,它帮助开发者以优雅、模块化的方式构建高效、可扩展的服务器端应用程序。本文旨在简洁明了地向你展示如何在NestJS中启用和使用定时任务,即使你是初次接触这个话题,也能够快速上手。定时任务,也称为计划任务,是后端服务中常用的一个功能,它允许你在指定的时间执行代码。想象一下,你需要每天早上6点发送邮件通知或者每隔一小时刷新你的应用数据,这些都可以通过定时任务来完成。NestJS中的定时任务功能强大而且易于使用。

乐闻世界 3333

process插件_利用SPSS 插件MLmed检验多水平中介的调节模型

本文介绍一个SPSS插件,用于检验多水平中介的调节,及该方法与Mplus的比较。1 Mlmed 简介及安装Mlmed 简介: Mlmed 由Rockwood 2017年开发,基于SPSS插件计算Multilevel moderated mediation. 可以提供multilevel mediation Monte Carlo 置信区间比如(模拟20000次),以及多水平调节的...

weixin_39976081的博客 5783

[Nestjs] 集成定时器以及使用方法

在后台开发中,我们经常遇到定时的需求,比如每天早上八点推送日志,推送待办,推送天气预报等。接下来简单介绍Nestjs集成定时器的简单使用方法!:在需要使用定时任务的地方,比如控制器或者其他服务中,将定时任务的类注入进来,并调用其方法。装饰器来指定定时任务的执行时间。可以使用 Cron 表达式或者预定义的字符串(如。模块,它提供了一种简单而强大的方式来执行定时任务。:在任何一个可注入类(比如服务)中创建定时任务。:在你的 NestJS 应用的根模块(通常是。在 NestJS 中集成定时器可以使用。

wuzhangting的博客 950

Information Fusion投稿避坑指南:从初稿到返修的完整流程解析(附模板下载)

本文详细解析了向Information Fusion投稿的全流程,从初稿准备到返修策略,涵盖了22个关键细节。特别强调了投稿前的隐形门槛、LaTeX模板的字体陷阱、图表规范要求以及返修回复的进阶技巧,帮助研究者避免常见错误,提升稿件接受率。附有实用模板下载,助力学术写作效率提升。

tgb34567890的博客 1421

基于Simulink进行步进电机的重复控制仿真建模

目的:通过引入一个周期延迟环节来补偿系统的周期性误差,从而提高系统对周期性参考信号或扰动的跟踪性能。方法内部模型原理:在控制器中嵌入一个与周期性信号相关的模型(例如周期延迟环节),以实现对周期性误差的零稳态误差控制。滤波器设计:为了避免高频噪声放大,通常会在重复控制器中加入低通滤波器。优势对周期性信号具有良好的跟踪性能。不需要精确的数学模型即可实现高性能控制。挑战:需要合理设计重复控制器的参数以避免系统不稳定。

MHD0815的博客 382

nestjs/schedule nestjs定时任务

pvs=21)

qq_39517116的博客 574

C#上位机实战:PLC与检测设备无缝对接,构建产品质量实时判定系统

本文分享了基于C#开发的汽车零部件质量检测系统实现经验。系统采用三层架构:设备层(PLC/视觉相机/三坐标)、通信层(OPC UA/SDK/串口)和应用层(数据采集/判定/存储)。重点解决了三大技术难点:1)通过OPC UA订阅模式将PLC通信延迟从500ms降至50ms;2)反编译厂商Demo破解视觉SDK对接难题;3)采用时间戳+产品ID实现多设备数据同步。系统上线后质检人员减少67%,误判率降至0.5%,数据追溯效率显著提升。文章强调工业场景下稳定性优先于技术复杂度,实用经验值得借鉴。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 803

【亲测免费】 Nest.js Schedule 指南

Nest.js Schedule 指南 项目介绍 Nest.js Schedule 是一个强大的任务调度库,专为基于 Nest.js 的应用程序设计。它允许开发者轻松地安排周期性任务或一次性事件,利用 TypeScript 和异步编程模型的优势。通过集成 Johnson Cron解析器,它支持复杂的cron表达式,使得定时任务的管理既灵活又直观。 项目快速启动 首先,确保你的开发环境已经安装了No...

gitblog_00723的博客 851

通过python+openCV实现对图片中箭头方向的判断

摘要: 针对YOLOv8算法在箭头方向识别效果不佳的问题,提出了一种基于OpenCV的解决方案。该方法通过图像预处理、轮廓分析、几何特征提取(凸包、质心、外接矩形)和方向向量计算,准确判断箭头的上下左右方向。代码示例展示了从图像读取到方向识别的完整流程,并提供了优化建议(如调整二值化阈值、处理多轮廓)。该方案在Windows11+Python3.12+OpenCV环境下验证有效,适用于需要简单几何特征分析的箭头方向检测场景。

AnChenliang_1002的博客 704

骑砍Ⅱ霸主MOD开发(16)-FaceKey&BannerKey

摘要:本文介绍了FaceKey人物模型和BannerKey旗帜模型的生成流程。FaceKey通过序列化参数生成人物模型,包括头部(脸部、嘴、睫毛、眼睛)、眉毛、头发、身体和躯干等组件,每个部分通过特定标签和骨骼绑定实现。BannerKey则通过解析参数生成旗帜模型,包括模型、贴图和颜色等元素。两种模型都采用参数化设计和XML配置文件实现模型生成与定制。

骑砍战团&霸主MOD开发 2289

Nest Schedule:基于 NestJS 的定时任务模块

Nest Schedule:基于 NestJS 的定时任务模块 Nest Schedule 是一个为 NestJS 框架设计的定时任务模块,基于流行的 cron 表达式来安排和执行定时任务。该项目的主要编程语言是 TypeScript,同时也包含一定比例的 JavaScript。 项目核心功能 Nest Schedule 模块的核心功能包括: 基于cron表达式的任务调度:允许开发者以 cron...

gitblog_00770的博客 384

41、矩形和圆柱形开槽微带贴片天线设计及性能分析

本文提出了一种适用于ISM频段(2.4 - 2.48 GHz)的微带圆形贴片天线,专为生物医学植入和可穿戴设备设计。通过在贴片上蚀刻矩形槽并去除圆柱形槽,实现了小型化与性能优化。采用Rogers 3010基板材料,结合缺陷接地结构(DGS)技术,有效改善了带宽、回波损耗和极化纯度。仿真结果显示,天线在弯曲状态下仍保持良好性能,回波损耗达-13 dB,VSWR为1.6,方向性提升至5.38 dB。与以往设计相比,本次设计在回波损耗和谐振频率稳定性方面表现优异,具备良好的生物相容性和应用潜力。未来将从开槽结构、

github5actions的博客 260

深入剖析一下 @nestjs/schedule 包在 NestJS 中实现定时任务的原理

@nestjs/schedule 将 Node.js 原生定时器和流行调度库的能力“NestJS 化”了,使其变得声明式、可注入、可管理,并完美融入 NestJS 的模块生命周期

pan303507479的博客 844

innovus:sroute 双层follow pin的做法

根据std cellpower pin的层次可以分成两种情况。

m0_61544122的博客 2733

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Nestjs框架: nestjs-schedule模块注册流程,源码解析与定时备份数据库

摘要 NestJS定时任务提供跨平台的定时任务解决方案,比系统级脚本更灵活。通过@nestjs/schedule模块,可以创建静态或动态定时任务,支持日志备份、计划提醒等场景。配置时需安装依赖并设置环境变量CRON_ON=true,在AppModule或ConditionalModule中注册ScheduleModule。定时任务服务类使用@Cron装饰器定义执行频率,系统启动时自动注册。该方案不受平台限制,只需Node.js环境即可运行,并支持动态添加任务。源码显示任务在onApplicationBoot

Wang的专栏 1489

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NestJS Schedule 模块常见问题解决方案

NestJS Schedule 模块常见问题解决方案 项目基础介绍 NestJS Schedule 模块是一个用于 NestJS 框架的调度模块,基于 cron 包实现。它允许开发者通过简单的配置来调度任务,支持定时任务、间隔任务和 cron 表达式任务。该模块的主要编程语言是 TypeScript 和 JavaScript。 新手使用注意事项及解决方案 1. 安装依赖时出现版本不兼容问题 问题描...

gitblog_01194的博客 936

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Nestjs22之定时任务

三者的核心区别对比特性addCronJobaddTimeout执行次数周期性(按 Cron 表达式重复)单次(延迟执行后销毁)周期性(按固定间隔重复)时间规则Cron 表达式(如0 3 * * *延迟时间(如30000毫秒)间隔时间(如5000毫秒)任务管理可手动启动/停止,需显式删除执行后自动销毁,可提前取消需显式删除以停止底层实现基于node-cron库基于 Node.js 原生的setTimeout基于 Node.js 原生的适用场景复杂时间规则(如每天、每周)

W1192931158的博客 669

nest框架的定时任务

【代码】nest框架的定时任务。

qq_26112725的博客 807

nestjs任务调度的使用

这个任务调度并不是因为node是js就草率的认为是settimeout或setinterval这样的。node的任务调度会开启一个node的子进程,在子进程中进行任务调度。当然nestjs已经帮我们封装好了相关的功能。第二种'45 * * * * *'意思是每分钟的底45秒执行一次。第一种为预设的CronExpression来定义间隔,下方的例子就是每10个小时执行一次。前端出身的我经常开会的时候会听到其他后端在说定时任务,现在写node也用到了任务调度。一个简单的任务调度的例子就完成了。

qq_40816649的博客 2017

Nest.js中使用任务调度

java中的xxl在nestJs中是有内置的任务调度@nestjs/schedule。在service中直接使用就行。在model中引入使用。具体间隔多久看官方配置。

无简介!! 557

探索 Nest Schedule:强大的定时任务管理库

探索 Nest Schedule:强大的定时任务管理库 在这个快节奏的开发世界中,有效地管理和调度后台任务是至关重要的。Nest Schedule 是一个专为 Nest.js 框架设计的开源库,它允许开发者使用装饰器轻松定义和执行定时任务,让工作变得更加高效和便捷。 项目介绍 Nest Schedule 是一个基于 NestJS 的模块,它的主要功能是提供了一种优雅的方式来创建、管理和执行定期任务...

gitblog_00043的博客 527

NestJs自定义定时任务服务

NestJs自定义定时任务服务

weixin_47401153的博客 612

NestJS定时器之@Cron

在NestJS中,任务调度可以在固定的日期/时间、重复的时间间隔之后,或者在指定的时间间隔之后执行任意代码(方法/函数)。Nest提供了包,它集成了流行的Node.jscron包,方便开发者实现定时任务。包提供了一个方便的枚举,其中包含常用的cron模式。你可以按以下方式使用这个枚举:typescript代码解读复制代码} }在这个例子中,方法将每30秒调用一次。

sc35262的博客 1110

NestJS 入门教程(六):定时任务和后台任务的实现

在上一篇文章中,我们实现了 WebSocket 实时通信功能。本文将介绍如何实现定时任务和后台任务,包括使用实现定时任务,使用实现任务队列。实现定时任务实现任务队列实现任务监控处理后台任务。

WEBRSS 573

NestJS 定时任务模块:高效服务器端应用的得力助手

NestJS 定时任务模块:高效服务器端应用的得力助手 在快速迭代的技术世界中,自动化和定时任务成为了现代应用程序不可或缺的一部分。今天,我们要向您隆重推荐一个基于业界广受欢迎的NestJS框架的优秀开源项目 —— NestJS Schedule。这个模块为您的Node.js后端赋予了强大的定时执行能力,是构建高效、可扩展服务的理想选择。 项目介绍 NestJS Schedule是一个专为Nest...

gitblog_00948的博客 402
上一篇: Nestjs框架: nestjs-schedule模块注册流程,源码解析与定时备份数据库
下一篇: Nestjs框架: nestjs-bull的使用与相关queue的规划
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值