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

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

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

Начать курс

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

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

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

1. Bull — самая популярная и функциональная библиотека

Bull — это современная, быстрая и надёжная очередь задач для Node.js, построенная на Redis. Она поддерживает все ключевые функции: отложенные задачи, повторные попытки, приоритеты, паузу/возобновление, а также мониторинг через встроенный UI.

Установка

npm install bull

Базовый пример

const Queue = require('bull');

// Создаём очередь
const emailQueue = new Queue('email', 'redis://127.0.0.1:6379');

// Обработчик задач
emailQueue.process(async (job) => {
  const { to, subject } = job.data;
  console.log(`Отправка письма на ${to}: ${subject}`);
  // Имитация отправки
  await new Promise(resolve => setTimeout(resolve, 1000));
  return { success: true };
});

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

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

  • Повторные попытки — автоматический повтор при сбоях с настраиваемой задержкой.
  • Приоритеты — задачи с высоким приоритетом обрабатываются раньше.
  • Отложенные задачи — можно задать задержку перед выполнением.
  • Пауза и возобновление — остановка очереди на обслуживание.
  • Мониторинг — встроенный веб-интерфейс bull-board.
  • События — подписка на события (completed, failed, progress).

Продвинутый пример с событиями

const Queue = require('bull');
const myQueue = new Queue('myQueue');

myQueue.on('completed', (job, result) => {
  console.log(`Задача ${job.id} завершена:`, result);
});

myQueue.on('failed', (job, err) => {
  console.error(`Задача ${job.id} упала: ${err.message}`);
});

myQueue.process(async (job) => {
  // Прогресс
  await job.progress(50);
  // Выполнение
  return { status: 'ok' };
});

Bull рекомендуется для проектов, где требуется максимальная гибкость и готовые инструменты для мониторинга.

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

Bee-Queue — это минималистичная очередь задач, ориентированная на производительность. Она проще, чем Bull, но при этом предоставляет все базовые возможности: отложенные задачи, повторы, приоритеты и масштабирование.

Установка

npm install bee-queue

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

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

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

// Обработчик
imageQueue.process(async (job) => {
  const { filename } = job.data;
  console.log(`Обработка изображения: ${filename}`);
  // Имитация обработки
  await new Promise(resolve => setTimeout(resolve, 2000));
  return { processed: true };
});

// Добавление задачи
imageQueue.createJob({
  filename: 'photo.jpg'
})
  .retries(2)
  .delayUntil(Date.now() + 10000) // через 10 секунд
  .save()
  .then(job => console.log(`Задача создана: ${job.id}`));

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

  • Низкое потребление памяти — идеально для микросервисов.
  • Простота API — минимум конфигурации.
  • Поддержка множества воркеров — легко масштабируется.
  • Отсутствие встроенного UI — нужно использовать внеш

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