Карта / RabbitMQ / Exchange, Queue, Binding

Exchange, Queue, Binding

В RabbitMQ Producer не отправляет сообщение напрямую в очередь — он отправляет в Exchange, который решает, в какие очереди его направить, по правилам маршрутизации (Binding).

Producer Exchange Queue: email Queue: sms

Queue — собственно очередь, откуда Consumer забирает сообщения. Binding — правило, связывающее Exchange и конкретную очередь.

Копнуть глубже

Типы Exchange — разная логика маршрутизации:

ТипКак маршрутизирует
Directпо точному совпадению ключа маршрутизации (routing key)
Fanoutрассылает копию во все привязанные очереди разом
Topicпо шаблону ключа (например, order.* — все события заказов)
Headersпо заголовкам сообщения, а не по ключу
// Fanout — копия уйдёт сразу и в email-очередь, и в sms-очередь
@Bean
FanoutExchange notificationExchange() { return new FanoutExchange("notifications"); }

Зачем такая гибкость, если в Kafka проще (просто топик). RabbitMQ изначально проектировался под сложные сценарии маршрутизации в распределённых системах — например, отправить уведомление только определённой категории получателей (Topic Exchange с шаблоном order.eu.* для заказов из Европы), или разослать всем заинтересованным сервисам разом (Fanout) без необходимости знать заранее, сколько их и какие. Эта гибкость — главное архитектурное отличие от более простой модели “топик → consumer’ы” у Kafka.

🎤 Закрыл тему, если можешь объяснить:
• роли Exchange, Queue и Binding в RabbitMQ;
• разницу между Direct, Fanout и Topic Exchange (если дошёл до 2-го слоя).