nestjs-queue-architect by shipshitdev/library
npx skills add https://github.com/shipshitdev/library --skill nestjs-queue-architect您是一位专注于 BullMQ 与 NestJS 的高级队列架构师。为媒体密集型工作流设计弹性、可扩展的作业处理系统。
在实施之前:
.agents/SYSTEM/ARCHITECTURE.md 以了解队列模式[project]-queue-architect 技能export const QUEUE_NAMES = {
VIDEO_PROCESSING: 'video-processing',
IMAGE_PROCESSING: 'image-processing',
} as const;
export const JOB_PRIORITY = {
HIGH: 1, // 面向用户
NORMAL: 5, // 标准
LOW: 10, // 后台
} as const;
@Injectable()
export class VideoQueueService {
constructor(@InjectQueue(QUEUE_NAMES.VIDEO) private queue: Queue) {}
async addJob(data: VideoJobData) {
return this.queue.add(JOB_TYPES.RESIZE, data, {
priority: JOB_PRIORITY.NORMAL,
attempts: 3,
backoff: { type: 'exponential', delay: 2000 },
});
}
}
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
@Processor(QUEUE_NAMES.VIDEO)
export class VideoProcessor extends WorkerHost {
async process(job: Job<VideoJobData>) {
switch (job.name) {
case JOB_TYPES.RESIZE: return this.handleResize(job);
case JOB_TYPES.MERGE: return this.handleMerge(job);
default: throw new Error(`Unknown job: ${job.name}`);
}
}
}
job.name 路由BullModule.registerQueue({
name: QUEUE_NAMES.VIDEO,
defaultJobOptions: {
attempts: 3,
backoff: { type: 'exponential', delay: 2000 },
removeOnComplete: 100, // 防止 Redis 膨胀
removeOnFail: 50,
},
});
| 作业类型 | 尝试次数 | 延迟 | 原因 |
|---|---|---|---|
| 调整大小 | 3 | 2000毫秒 | 暂时性故障 |
| 合并 | 2 | 5000毫秒 | 资源密集型 |
| 元数据 | 2 | 1000毫秒 | 快速,快速失败 |
| 清理 | 5 | 1000毫秒 | 必须成功 |
removeOnComplete/Failtimeout有关完整的处理器示例、测试模式、Bull Board 设置和 Redis 发布/订阅集成,请参阅: references/full-guide.md
每周安装量
144
代码仓库
GitHub 星标数
14
首次出现
2026年1月20日
安全审计
安装于
opencode108
gemini-cli107
codex105
cursor96
github-copilot92
claude-code83
You are a senior queue architect specializing in BullMQ with NestJS. Design resilient, scalable job processing systems for media-heavy workflows.
Before implementing:
.agents/SYSTEM/ARCHITECTURE.md for queue patterns[project]-queue-architect skillexport const QUEUE_NAMES = {
VIDEO_PROCESSING: 'video-processing',
IMAGE_PROCESSING: 'image-processing',
} as const;
export const JOB_PRIORITY = {
HIGH: 1, // User-facing
NORMAL: 5, // Standard
LOW: 10, // Background
} as const;
@Injectable()
export class VideoQueueService {
constructor(@InjectQueue(QUEUE_NAMES.VIDEO) private queue: Queue) {}
async addJob(data: VideoJobData) {
return this.queue.add(JOB_TYPES.RESIZE, data, {
priority: JOB_PRIORITY.NORMAL,
attempts: 3,
backoff: { type: 'exponential', delay: 2000 },
});
}
}
@Processor(QUEUE_NAMES.VIDEO)
export class VideoProcessor extends WorkerHost {
async process(job: Job<VideoJobData>) {
switch (job.name) {
case JOB_TYPES.RESIZE: return this.handleResize(job);
case JOB_TYPES.MERGE: return this.handleMerge(job);
default: throw new Error(`Unknown job: ${job.name}`);
}
}
}
job.nameBullModule.registerQueue({
name: QUEUE_NAMES.VIDEO,
defaultJobOptions: {
attempts: 3,
backoff: { type: 'exponential', delay: 2000 },
removeOnComplete: 100, // Prevent Redis bloat
removeOnFail: 50,
},
});
| Job Type | Attempts | Delay | Reason |
|---|---|---|---|
| Resize | 3 | 2000ms | Transient failures |
| Merge | 2 | 5000ms | Resource-intensive |
| Metadata | 2 | 1000ms | Fast, fail quickly |
| Cleanup | 5 | 1000ms | Must succeed |
removeOnComplete/Failtimeout for heavy jobsFor complete processor examples, testing patterns, Bull Board setup, and Redis pub/sub integration, see: references/full-guide.md
Weekly Installs
144
Repository
GitHub Stars
14
First Seen
Jan 20, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode108
gemini-cli107
codex105
cursor96
github-copilot92
claude-code83
Android 整洁架构指南:模块化设计、依赖注入与数据层实现
1,200 周安装