Bull(Node.js 任务队列)

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 Bull 以及为什么需要它?

Bull 是 Node.js 环境中用于管理任务队列(job queues)最流行的库之一。它基于 Redis 构建,能够高效处理后台任务、在工作进程之间分配负载以及管理执行优先级。如果你的应用程序需要异步执行资源密集型操作(如发送邮件、生成 PDF、处理图像、解析数据),而不阻塞主请求线程,那么 Bull 是理想的解决方案。

安装

安装 Bull 需要预先启动 Redis 服务器。库本身的安装通过 npm 完成:

npm install bull

同时确保 Redis 可通过地址 localhost:6379 访问,或者指定你自己的连接参数。

主要功能

  • 创建队列 — 只需初始化一个带有队列名称的对象。
  • 添加任务(jobs) — 可以将任何 JavaScript 对象作为任务数据传递。
  • 处理器(processors) — 为每个任务执行的函数。
  • 重试机制(retries) — 出错时自动重试。
  • 延迟(delays) — 延迟执行任务。
  • 优先级 — 高优先级的任务会优先处理。
  • 事件 — 可以监听完成、错误、进度等事件。
  • 暂停/恢复 — 临时停止队列。

JavaScript (Node.js) 代码示例

一个用于发送邮件的简单队列示例:

const Queue = require('bull');

// 创建队列const emailQueue = new Queue('email', 'redis://127.0.0.1:6379');

// 添加任务emailQueue.add({ to: 'user@example.com', subject: '你好!', body: '这是一封测试邮件'}, { attempts: 3, // 出错时最多重试 3 次 delay: 5000 // 延迟 5 秒执行});

// 任务处理器emailQueue.process(async (job) => { console.log('发送邮件至:', job.data.to); // 在此调用你的邮件发送函数 // await sendEmail(job.data); console.log('邮件发送成功'); return Promise.resolve();});

// 成功事件emailQueue.on('completed', (job) => { console.log(`任务 ${job.id} 已完成`);});

// 错误事件emailQueue.on('failed', (job, err) => { console.error(`任务 ${job.id} 失败:${err.message}`);});

何时使用 Bull

建议在以下场景中使用 Bull:

  • 后台任务 — 发送通知、群发邮件、生成报告。
  • 媒体处理 — 调整图像大小、转换视频格式。
  • Web 抓取 — 在后台收集数据而不阻塞 API。
  • 与外部服务集成 — 数据同步、调用第三方 API。
  • 分布式处理 — 在不同服务器上运行多个工作进程。

由于使用 Redis,Bull 队列具有容错性:如果工作进程崩溃,任务不会丢失,并会被其他进程执行。这使得该库成为生产系统的可靠选择。

推荐