Архитектура · Урок 79

Очереди и стриминг: 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

ℹ️
Признак зрелой системы — «событие, а не запрос»: сервис-авторизация не спрашивает у сервиса-платежей «что там?», а слушает события payment.paid. Это уменьшает связанность.