Очереди и стриминг: RabbitMQ, Kafka
Отправить письмо, сгенерить отчёт, синхронизировать сервис — не нужно ждать прямо в запросе. Очередь делает работу асинхронной и переживает отказы отдельных узлов.
Как устроена очередь
// Производитель кладёт сообщение в обменник
channel.publish(exchange, "order.created", msg);
// Потребитель слушает и подтверждает обработку
consumer.onMessage(async (msg) => {
try { await sendEmail(msg); channel.ack(msg); }
catch (err) { channel.nack(msg); } // ретрай позже
});
💡
ack/nack — ключевое: подтверждаем только после успешной обработки. Упал брокер или сервис — сообщение не потеряется, а вернётся в очередь к повторной попытке.
RabbitMQ vs Kafka
- RabbitMQ — умная маршрутизация, точная доставка, хорош для задач сверх-по-одному (письма, генерация);
- Kafka — таблица-лог событий: replay, высокая пропускная способность, метрики и «история изменений».
ℹ️
Признак зрелой системы — «событие, а не запрос»: сервис-авторизация не спрашивает у сервиса-платежей «что там?», а слушает события payment.paid. Это уменьшает связанность.