SuperAPI AI 工具集

nestjs-scheduling

编程与开发

查看项目

更新于 10-15 22:13

技能介绍

用途:在 NestJS 中实现分布式定时任务,解决多实例环境下 @Cron 重复执行的问题。

主要能力:

  • 注册定时模块:在 AppModule 中导入 ScheduleModule.forRoot()。
  • 创建 cron 处理器:用 @Cron(CronExpression.*) 装饰服务方法。
  • 分布式锁:应用 Redis 锁装饰器,防止多 Pod 重复运行;逻辑基于 Redis 原子 SET,示例为 SET resource_name my_random_value NX PX 30000。可选用 nestjs-redlock,或通过 redlock 库自定义 Redis 封装。
  • 重活卸载:将任务 ID 推入 BullMQ,由 worker 处理,避免 cron 处理器被事件循环阻塞。

必要用法与步骤:

  1. 导入 ScheduleModule.forRoot()。
  2. 用 @Cron 装饰方法。
  3. 加 Redis 锁装饰器。
  4. 把重活以 Job ID 形式推入 BullMQ 队列。
  5. 用 try/catch 包裹全部 cron 逻辑。
  6. 用 2 个以上实例验证只有一个能获取锁。

限制与反模式:

  • 不要在 cron 处理器中直接做重处理,应推入 BullMQ 队列。
  • 不要在无 try/catch 保护下运行 cron 逻辑,未捕获异常会导致整个 Node 进程崩溃。
  • 多 Pod 环境下不要裸用 @Cron,需配合分布式锁。

其他实现细节与代码示例暂未提供。