Вопрос проверяет знание популярных систем очередей сообщений и умение выбирать подходящий инструмент для разных сценариев асинхронной обработки.
Очереди сообщений (Message Queues) — это промежуточное ПО, которое позволяет различным частям распределённой системы обмениваться данными асинхронно, помещая сообщения в буфер. Это ключевой паттерн для развязки сервисов, повышения отказоустойчивости и обработки пиковых нагрузок.
const amqp = require('amqplib');
async function sendToQueue(queueName, message) {
try {
// 1. Подключение к брокеру
const connection = await amqp.connect('amqp://localhost');
const channel = await connection.createChannel();
// 2. Объявление очереди (создаст, если не существует)
await channel.assertQueue(queueName, { durable: true });
// 3. Отправка сообщения
channel.sendToQueue(queueName, Buffer.from(message), {
persistent: true // Сообщение переживёт перезапуск брокера
});
console.log(`Сообщение отправлено: ${message}`);
// 4. Закрытие соединения
await channel.close();
await connection.close();
} catch (error) {
console.error('Ошибка:', error);
}
}
// Использование
sendToQueue('order_processing', JSON.stringify({ orderId: 123, userId: 456 }));В этом примере показана базовая отправка сообщения в устойчивую очередь RabbitMQ. Потребитель (consumer) будет асинхронно забирать и обрабатывать такие сообщения, что позволяет основному приложению быстро отвечать клиенту.
Вывод: Используйте RabbitMQ для сложной маршрутизации и гарантированной доставки в рабочих процессах, Kafka для потоковой обработки больших данных и событийных логов, а Redis для простых и сверхбыстрых фоновых задач, где потеря некоторых сообщений допустима.