Очереди задач в Node.js: Bull, Bee-Queue и Kue

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

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

Начать курс

Очереди задач для JavaScript (Node.js): Bull, Bee-Queue и Kue

При разработке веб-приложений на Node.js часто возникает необходимость выполнять длительные или ресурсоёмкие операции асинхронно, не блокируя основной поток обработки запросов. Типичные примеры: отправка email-уведомлений, обработка загруженных изображений, генерация PDF-отчётов или синхронизация с внешними API. Для решения этих задач используются очереди задач (job queues) — механизм, который позволяет отложить выполнение работы, распределить нагрузку и обеспечить отказоустойчивость.

В этой статье мы рассмотрим три популярные библиотеки для управления очередями в экосистеме Node.js: Bull, Bee-Queue и Kue. Каждая из них имеет свои особенности, преимущества и сценарии использования.

Зачем нужны очереди задач?

Основные причины внедрения очередей в бэкенд на Node.js:

  • Разгрузка основного потока. Долгие операции (например, отправка 1000 писем) не блокируют ответ пользователю.
  • Повторные попытки. Если задача завершилась ошибкой, очередь автоматически повторит её через заданный интервал.
  • Планирование. Можно отложить выполнение задачи на определённое время (например, через 1 час).
  • Масштабирование. Несколько воркеров могут параллельно обрабатывать задачи из одной очереди.

1. Bull — современная и производительная очередь

Bull — это одна из самых популярных библиотек для работы с очередями в Node.js. Она построена на основе Redis и предоставляет богатый API для управления задачами.

Основные возможности Bull:

  • Поддержка приоритетов задач.
  • Настраиваемые повторные попытки (retries).
  • Отложенный запуск (delay).
  • События (job завершена, ошибка, прогресс).
  • Встроенный UI-интерфейс для мониторинга через bull-board.

Установка:

npm install bull

Пример создания очереди и обработчика:

const Queue = require('bull');

// Создаём очередь для отправки email
const emailQueue = new Queue('email', {
  redis: { host: '127.0.0.1', port: 6379 }
});

// Добавляем задачу в очередь
emailQueue.add({
  to: 'user@example.com',
  subject: 'Привет!',
  body: 'Это тестовое письмо'
}, {
  attempts: 3,       // повторить до 3 раз при ошибке
  delay: 5000        // отложить на 5 секунд
});

// Обработчик задач
emailQueue.process(async (job) => {
  const { to, subject, body } = job.data;
  // Имитация отправки письма
  await sendEmail(to, subject, body);
  console.log(`Письмо отправлено: ${to}`);
});

Когда выбирать Bull: если вам нужна надёжная очередь с расширенными функциями (приоритеты, повторные попытки, мониторинг) и вы готовы использовать Redis.

2. Bee-Queue — лёгкая и быстрая

Bee-Queue — это минималистичная очередь, также работающая на Redis. Она ориентирована на простоту и производительность. Код библиотеки компактен, API интуитивно понятен.

Особенности Bee-Queue:

  • Нет зависимостей, кроме Redis.
  • Поддержка событий (ready, job succeeded, job failed).
  • Возможность настройки таймаута обработки.
  • Простая система повторных попыток.

Установка:

npm install bee-queue

Пример использования:

const Queue = require('bee-queue');

const imageQueue = new Queue('image-processing', {
  redis: { host: '127.0.0.1', port: 6379 }
});

// Добавляем задачу
imageQueue.createJob({ imagePath: '/uploads/photo.jpg' })
  .retries(2)
  .save();

// Обработчик
imageQueue.process(async (job) => {
  const { imagePath } = job.data;
  // Обработка изображения
  await processImage(imagePath);
  console.log(`Изображение обработано: ${imagePath}`);
});

Когда выбирать Bee-Queue: если проект небольшой, не требуется сложная логика планирования, а скорость и простота важнее расширенных функций.

3. Kue — классика с встроенным UI

Kue — одна из старейших библиотек для очередей в Node.js. Она также использует Redis, но имеет встроенный веб-интерфейс для просмотра и управления задачами. Однако стоит отметить, что Kue менее активно поддерживается в послед

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