如何在NestJS中为每个用户实现独立异步任务队列
用户需求与问题
核心功能需求
- 为每个用户创建独立任务队列,队列按指定间隔执行一系列异步任务
- 支持后续根据用户请求修改任务执行间隔
- 应用场景:开发支持自定义配置的邮件发送机器人,可按用户设定的间隔向指定联系人发送指定邮件
使用Bull队列时遇到的问题
- 动态队列/线程创建:不清楚如何为单个用户创建独立队列,NestJS模块仅支持指定固定数量线程,用户数量不固定时,动态创建线程的方案不明
- 间隔逻辑不合理:配置的执行间隔未考虑任务本身的执行时间。例如设置间隔1秒但任务需执行5秒时,要么线程允许则每秒生成新任务(导致任务堆积),要么任务依次执行且完成后等待1秒再启动下一个(实际间隔变为6秒)
- 进程管理不便:需要便捷的方式管理这些任务进程,比如暂停任务或修改执行间隔
现有代码示例
async startProcessQueue(userId: string, accountId: string) { try { await this.processesQueue.add('startProcess', { userId, accountId }, { delay: 15000, jobId: accountId, repeat: { every: 10000 }, }) } catch (e) { throw new WsException(e.message); } }
其他尝试
试过BullMQ的虚拟多线程方案,但无法设置任务间隔,因为实际运行的是包含子任务的主任务,无法实现按间隔执行的需求
内容的提问来源于stack exchange,提问作者Aleksandr
相关产品推荐
相关产品推荐

