Ответ
Очередь (Queue) — это абстрактная структура данных, работающая по принципу FIFO (First In, First Out — "первым пришёл, первым ушёл"). В контексте Node.js очереди критически важны для управления задачами, обработки фоновых процессов и балансировки нагрузки в асинхронной, событийно-ориентированной архитектуре.
Базовая реализация:
class SimpleQueue {
constructor() {
this.items = [];
}
enqueue(item) {
this.items.push(item); // Добавление в конец
}
dequeue() {
return this.items.shift(); // Извлечение из начала
}
isEmpty() {
return this.items.length === 0;
}
}
// Пример использования
const taskQueue = new SimpleQueue();
taskQueue.enqueue({ type: 'email', to: 'user@example.com' });
taskQueue.enqueue({ type: 'report', userId: 123 });
const nextTask = taskQueue.dequeue(); // Получим задачу на email
Практическое применение в Node.js:
-
Очереди задач для фоновой обработки:
- Проблема: Длительные операции (отправка email, генерация PDF, обработка видео) блокируют Event Loop или превышают время ожидания HTTP-запроса.
- Решение: Поместить задачу в очередь (например, в Redis) и обработать её отдельным воркер-процессом.
// Использование библиотеки Bull (на основе Redis) const Queue = require('bull'); const emailQueue = new Queue('email');
// В обработчике маршрута app.post('/send-newsletter', async (req, res) => { await emailQueue.add({ to: req.body.to, subject: 'Welcome' }); res.json({ status: 'Email queued' }); // Мгновенный ответ клиенту });
// Воркер-процесс (отдельный файл) emailQueue.process(async (job) => { await sendEmail(job.data); // Длительная операция });
-
Контроль скорости запросов (Rate Limiting):
- Очередь помогает ограничивать количество вызовов внешнего API в единицу времени, чтобы не превысить лимиты.
-
Буферизация и балансировка между производителем и потребителем:
- Например, потоковая загрузка файлов (производитель) и их пошаговая обработка (потребитель).
Популярные библиотеки для очередей в Node.js экосистеме: Bull, Agenda, Kue, Bee-Queue. Они предоставляют персистентность (часто через Redis), повторные попытки, планирование и мониторинг.