ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

BullMQ Pro 暂停组(Pause Groups)完整指南:pauseGroup 与 resumeGroup 实战解析

BullMQ Pro 暂停组(Pause Groups)完整指南:pauseGroup 与 resumeGroup 实战解析 后端消息队列任务调度【免费下载链接】bullmqBullMQ - Message Queue and Batch processing for NodeJS, Python, .NET, Elixir, Rust and PHP based on Redis or PostgreSQL项目地址https://gitcode.com/gh_mirrors/bu/bullmq点击查看免费下载本指南聚焦 BullMQ Pro 的「暂停组」Pausing Groups能力如何在单个队列中以组Group为单位全局暂停或恢复任务消费。读完本文你将掌握pauseGroup/resumeGroup的调用方式、返回值语义、与进行中任务的行为关系以及如何结合组事件与队列级暂停区分使用场景。什么是暂停组BullMQ Pro 的 Groups 功能允许在单个队列内按组group分发任务使各组内的任务按“轮询round-robin”方式被处理。而暂停组则是对这一机制进行全局控制的开关当一个组被暂停后任何 Worker 都不会再领取属于该组的任务。核心语义如下引自 docs/gitbook/bullmq-pro/groups/pausing-groups.md暂停是全局的一旦调用暂停所有连接到该队列的 Worker 都会遵守而非只对某个 Worker 生效。暂停组只会阻止新的任务被领取。当前正在处理该组任务的 Worker 会继续执行直至任务完成或失败。正在处理中的任务结束后Worker 会进入空闲状态直到该组被恢复resume才会继续领取该组的任务。暂停与恢复都通过Queue实例上的方法完成。注意本指南描述的是 BullMQ Protaskforcesh/bullmq-pro中的 Groups 能力属于付费/Pro 版本特性开源版 BullMQ 的Queue不具备pauseGroup/resumeGroup方法。pauseGroup暂停一个组暂停一个组调用Queue实例的pauseGroup(groupId)方法await myQueue.pauseGroup(groupId);方法签名Pro 版本QueuePropauseGroup(groupId: string): Promiseboolean行为要点即使groupId当时不存在也会被加入暂停列表。原因在于组可能是“瞬态的”ephemeral组可以随任务的到来动态出现因此预先将不存在的组加入暂停列表可以确保未来新增到该组的任务一出现即被阻止领取。pauseGroup返回boolean。若该组已经处于暂停状态则返回false表示本次调用未产生实际变更若首次成功暂停则返回true。一个完整的示例import { QueuePro } from taskforcesh/bullmq-pro; const myQueue new QueuePro(video-transcoding); const result await myQueue.pauseGroup(user-42); if (result true) { console.log(Group user-42 paused successfully); } else { console.log(Group user-42 was already paused); }resumeGroup恢复一个组恢复一个组调用Queue实例的resumeGroup(groupId)方法await myQueue.resumeGroup(groupId);行为要点resumeGroup返回boolean。在以下两种情况下返回false该组不存在从未被暂停过也从未出现在暂停列表中该组已经处于恢复未暂停状态。只有当该组确实处于暂停状态并被成功恢复时才返回true。一个完整的示例import { QueuePro } from taskforcesh/bullmq-pro; const myQueue new QueuePro(video-transcoding); const result await myQueue.resumeGroup(user-42); if (result true) { console.log(Group user-42 resumed, workers can pick jobs again); } else { console.log(Group user-42 is not paused (either missing or already resumed)); }暂停组与任务处理状态的关系理解暂停组的运行时行为关键是区分「正在处理的任务」与「等待领取的任务」状态暂停后的行为该组等待中的任务waiting / delayed / prioritized 等不会被任何 Worker 领取保留在队列中等待恢复该组正在处理中的任务activeWorker 继续执行直到任务完成或失败已完成/失败的任务正常进入完成或失败流程不受暂停影响Worker 空闲在组被恢复前不再领取该组任务可继续处理其他组的任务见下文需要特别指出的是暂停是“组级”的。如果一个 Worker 绑定的队列中包含多个组暂停其中某一个组Worker 仍然可以继续处理其他未被暂停的组以及无组non-group任务。这与队列级暂停queue.pause()见 docs/gitbook/bull/quick-guide.md不同——后者会停止整个队列的任务分发。暂停组与队列级暂停的对比BullMQ 本身提供了队列级的pause()/resume()见 docs/gitbook/bull/quick-guide.md而 BullMQ Pro 在此基础上提供了更细粒度的组级暂停维度队列级暂停queue.pause()组级暂停pauseGroup()影响范围整个队列的所有任务仅指定的组适用场景运维窗口、整体停机维护针对特定业务实体如某个用户暂停处理与进行中任务的关系同样不打断进行中的任务同样不打断进行中的任务恢复方式queue.resume()resumeGroup(groupId)使用建议与注意事项幂等性设计由于pauseGroup/resumeGroup在“无变更”时返回false在实际业务中建议根据返回值判断是否需要后续处理如记录日志、触发补偿逻辑避免重复执行相同操作。暂停列表持久性暂停的组会被记录在暂停列表中即使组不存在也会记录这意味着一个组被暂停后即便当前没有任何任务未来新加入该组的任务也会被阻止领取。在设计任务清理或组回收逻辑时需要考虑这一点。不要用暂停组替代限流如果你需要的是控制某组的处理速率或并发应使用 groups/rate-limiting.md 与 groups/local-group-rate-limit.md 中描述的组级限流能力而不是暂停组。暂停组是“完全停止”限流是“限制速度”。结合组并发使用暂停组与 groups/local-group-concurrency.md 描述的本组并发控制可以叠加使用——暂停组完全阻止领取组并发则限制同组并行执行的任务数。与批处理batches的配合如果队列启用了批处理并设置了groupAffinity见 docs/gitbook/bullmq-pro/batches.md暂停一个组后该组的任务也不会进入新的批处理直到恢复。相关 API 与延伸阅读Pause Group API ReferenceResume Group API Reference组功能总览docs/gitbook/bullmq-pro/groups/README.md组级限流docs/gitbook/bullmq-pro/groups/rate-limiting.md组级并发docs/gitbook/bullmq-pro/groups/local-group-concurrency.md队列级暂停/恢复开源版docs/gitbook/bull/quick-guide.md本文内容基于当前仓库中 docs/gitbook/bullmq-pro/groups/pausing-groups.md 及仓库内相关文档整理API 方法签名以 BullMQ Pro 官方文档为准。赞分享后端消息队列任务调度【免费下载链接】bullmqBullMQ - Message Queue and Batch processing for NodeJS, Python, .NET, Elixir, Rust and PHP based on Redis or PostgreSQL项目地址https://gitcode.com/gh_mirrors/bu/bullmq点击查看免费下载相关推荐BullMQ Pro Groups 数据读取指南分组 Job 计数与分页查询的完整实战BullMQ Pro Groups 数据读取指南分组 Job 计数与分页查询的完整实战 分组Groups是 BullMQ Pro 的核心能力之一它允许你后端消息队列任务调度Nuclei 模糊测试实战4步从第一份模板到性能调优的完整指南Nuclei 模糊测试实战4步从第一份模板到性能调优的完整指南 Nuclei 是一款基于 YAML 模板的开源漏洞扫描器它内置的 fuzzing模糊测试后端消息队列任务调度终极文字转手写工具3分钟让电子文档拥有真实笔迹的完整指南终极文字转手写工具3分钟让电子文档拥有真实笔迹的完整指南 还在为手写作业而烦恼想让你的数字内容拥有温暖的手写质感吗文字转手写工具正是你需要的完美解决方案后端消息队列任务调度上一篇Magic-Doc 使用教程下一篇Arrow与Bow集成游戏叙事SDK的完整开发教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进