SKILL.md
Task Scheduling & Jobs
Distributed Cron (Critical)
- Problem:
@Cron()runs on every instance. In K8s with 3 pods, your "Daily Report" runs 3 times. - Solution: Distributed Locking using Redis.
- Pattern: Using a decorator to wrap the cron method. - Logic: SET resourcename myrandom_value NX PX 30000 (Redis Atomic Set).
Cron Decorator Pattern
- Implementation:
``typescript @Cron(CronExpression.EVERYMINUTE) @DistributedLock({ key: 'sendemails', ttl: 5000 }) async handleCron() { // Only runs if lock acquired } ``
- Tools: Use
nestjs-redlockor custom Redis wrapper viaredlocklibrary.
Job Robustness
- Isolation: Never perform heavy processing inside the Cron handler.
- Pattern: Cron -> Push Job ID to Queue (BullMQ) -> Worker processes it. - Why: Cron schedulers can get blocked by the Event Loop; Workers are scalable.
- Error Handling: Wrap ALL cron logic in
try/catch. Uncaught exceptions in a Cron job can crash the entire Node process.