Bull (Очередь задач для Node.js)

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Что такое Bull и зачем он нужен?

Bull — это одна из самых популярных библиотек для управления очередями задач (job queues) в среде Node.js. Она построена на базе Redis и позволяет эффективно обрабатывать фоновые задачи, распределять нагрузку между воркерами и управлять приоритетами выполнения. Если вашему приложению нужно выполнять ресурсоемкие операции (отправка email, генерация PDF, обработка изображений, парсинг данных) асинхронно, не блокируя основной поток запросов, Bull — идеальное решение.

Установка

Для установки Bull потребуется предварительно запущенный сервер Redis. Установка самой библиотеки выполняется через npm:

npm install bull

Также убедитесь, что Redis доступен по адресу localhost:6379 или укажите свои параметры подключения.

Основные функции

  • Создание очереди — достаточно инициализировать объект с именем очереди.
  • Добавление задач (jobs) — можно передавать любые JavaScript-объекты в качестве данных задачи.
  • Обработчики (processors) — функция, которая выполняется для каждой задачи.
  • Повторные попытки (retries) — автоматический повтор при ошибках.
  • Задержки (delays) — отложенный запуск задачи.
  • Приоритеты — задачи с высоким приоритетом обрабатываются раньше.
  • События — можно слушать события завершения, ошибок, прогресса.
  • Пауза/возобновление — временная остановка очереди.

Пример кода на JavaScript (Node.js)

Простой пример очереди для отправки email:

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);
  // Здесь вызов вашей функции отправки email
  // 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 scraping — сбор данных в фоне без блокировки API.
  • Интеграции с внешними сервисами — синхронизация данных, вызов сторонних API.
  • Распределенная обработка — запуск нескольких воркеров на разных серверах.

Благодаря использованию Redis очередь Bull устойчива к сбоям: если воркер упал, задача не потеряется и будет выполнена другим процессом. Это делает библиотеку надежным выбором для production-систем.

Рекомендаций