本文へ移動
cccskills
無料GitHub で公開

nestjs-scheduling

Implement distributed cron jobs with Redis-based locking and BullMQ offloading in NestJS. Use when adding @Cron scheduled tasks, preventing duplicate runs across pods, or delegating heavy work to queue workers.

インストール方法を見る

含まれるファイル(3)

  • SKILL.md2.4 KB
  • evals/evals.json2.2 KB
  • references/example.md753 B

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Task Scheduling & Jobs

Priority: P1 (HIGH)

Workflow: Add Scheduled Task

  1. Register ScheduleModule — Import ScheduleModule.forRoot() in AppModule.
  2. Create cron handler — Decorate service method with @Cron(CronExpression.*).
  3. Add distributed lock — Apply Redis lock decorator to prevent multi-pod duplication.
  4. Offload heavy work — Push job IDs to BullMQ; let workers process them.
  5. Wrap in try/catch — Uncaught exceptions in cron handlers crash entire Node process.
  6. Verify — Test with 2+ instances to confirm only one acquires lock.

Problem & Solution

  • Problem: @Cron() runs on every instance. In K8s with 3 pods, your "Daily Report" runs 3 times.
  • Solution: Distributed Locking using Redis.
  • Pattern: Using decorator to wrap cron method.
  • Logic: SET resource_name my_random_value NX PX 30000 (Redis Atomic Set).

Cron Decorator Pattern

  • Implementation:

See implementation examples

  • Tools: Use nestjs-redlock or custom Redis wrapper via redlock library.

Cron-to-Queue Offload

See implementation examples

Job Robustness

  • Isolation: Never perform heavy processing inside Cron handler.
  • Pattern: Cron -> Push Job ID to Queue (BullMQ) -> Worker processes it.
  • Why: Cron schedulers can get blocked by Event Loop; Workers scalable.
  • Error Handling: Wrap ALL cron logic in try/catch. Uncaught exceptions in Cron job can crash entire Node process.

Anti-Patterns

  • No unguarded cron logic: Always wrap in try/catch; uncaught exceptions crash entire Node process.
  • No direct cron processing: Push to BullMQ queue; workers scalable, cron handlers not.
  • No bare @Cron in multi-pod: Use distributed locking (redlock) to prevent duplicate concurrent runs.

Canonical response anchors

When this skill applies, preserve the following domain terminology or equivalent concrete examples in the answer when relevant:

  • crash

Remediation anchors

  • Remediation anchors: BullMQ, event loop, worker

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Upgrade an Android project to Android Gradle Plugin (AGP) 9. Use when migrating to AGP 9, updating Gradle build files, migrating to built-in Kotlin, or adopting the new AGP DSL.

日本語の概要は準備中です。原文の説明を表示しています。

HoangNguyen0403/agent-skills-standard5732026年10月12日 更新

Apply Clean Architecture layering, modularization, and Unidirectional Data Flow in Android projects. Use when setting up project structure, placing code in layers, configuring feature/core modules, or implementing UDF patterns; defer Compose state and ViewModel/StateFlow implementation to their specific skills.

日本語の概要は準備中です。原文の説明を表示しています。

HoangNguyen0403/agent-skills-standard5732026年10月12日 更新

Implement WorkManager and background processing correctly on Android. Use when creating Worker classes, scheduling tasks, choosing between WorkManager and Foreground Services, or setting up Hilt in workers; defer FCM and notification delivery to android-notifications.

日本語の概要は準備中です。原文の説明を表示しています。

HoangNguyen0403/agent-skills-standard5732026年10月12日 更新

Build high-performance declarative UI with Jetpack Compose. Use when writing Composable functions, optimizing recomposition, hoisting state, or working with LazyColumn and side effects; defer deep-link and navigation routing to android-navigation.

日本語の概要は準備中です。原文の説明を表示しています。

HoangNguyen0403/agent-skills-standard5732026年10月12日 更新

Migrate an Android XML View to Jetpack Compose following a structured 10-step workflow. Use when converting XML layouts to Compose, setting up Compose in an existing View-based project, or incrementally adopting Compose.

日本語の概要は準備中です。原文の説明を表示しています。

HoangNguyen0403/agent-skills-standard5732026年10月12日 更新

Write correct coroutine scopes, lifecycle collection, and dispatcher injection in Android production code. Use for suspend functions, coroutine scopes, and dispatcher mechanics; defer ViewModel StateFlow/LiveData architecture, Fragment lifecycle recipes, persistence/notifications, and unit-test recipes to their specific skills.

日本語の概要は準備中です。原文の説明を表示しています。

HoangNguyen0403/agent-skills-standard5732026年10月12日 更新

HoangNguyen0403 のスキルをすべて見る

このスキルの問題を報告する