SuperAPI AI 工具集

nestjs-bullmq

编程与开发

查看项目

更新于 10-16 08:48

技能介绍

用途:在 NestJS 项目中实现 BullMQ 作业工作流,适用于构建队列处理器,以及处理 Redis 限流(如 Upstash)、空闲轮询、停滞作业和作业保留等场景。该资料定位为 P0(关键)级别规范。

主要能力与规则:每个 @Processor 需配置 drainDelay、stalledInterval、maxStalledCount,避免默认 drainDelay(5 ms)在空闲时产生大量 Redis 命令;通过继承 BaseProcessor 而非 WorkerHost 来对 Redis 失败产生的 ReplyError 日志进行限流;每个 BullModule.registerQueue 应配置 removeOnComplete、removeOnFail、attempts、backoff;数值选项集中放在 src/common/constants/bull-queue.constants.ts,关键常量有 QUEUE_DRAIN_DELAY_MS(10000 ms)和 QUEUE_STALLED_INTERVAL_MS(60000 ms),并使用 getSharedBullQueueOptions 辅助方法,队列与作业名称放在 {feature}.constants.ts,禁止内联魔法数字;queue.add() 必须先写数据库记录再在 try-catch 中入队,避免 Redis 错误变为 500;RedisThrottlerStorage.increment() 需捕获所有 Redis 错误并返回 fail-open 记录,避免 Redis 抖动影响全部 HTTP 路由;新队列遵循 isRedisEnabled() 条件与 mock token 模式;cron 负责调度、processor 负责执行,两者都需保留;开发环境使用本地 Docker Redis,不要指向 Upstash。

反模式:不要裸用 @Processor(NAME)、不要直接继承 WorkerHost、不要缺少 defaultJobOptions、不要内联数字、不要未加保护的 queue.add()、不要在 throttler increment 中抛异常、不要在 redisEnabled 为 false 时缺少 mock token、不要因存在 cron 就删除 processor、不要在开发中使用云端 Redis。

限制:资料未提供安装命令、具体版本要求、收费标准及完整代码示例,相关细节暂未提供。