Ответ
В RabbitMQ exchange (обменник) отвечает за маршрутизацию сообщений в очереди. Выбор типа exchange определяет логику этой маршрутизации. Существует четыре основных типа:
-
Direct Exchange
- Логика: Отправляет сообщение в очередь, если её ключ привязки (
binding key
) в точности совпадает с ключом маршрутизации (routing key
) сообщения. - Применение: Используется для прямой адресации сообщений конкретному потребителю. Классический пример — очередь задач, где каждый
worker
получает задачи из своей персональной очереди.
- Логика: Отправляет сообщение в очередь, если её ключ привязки (
-
Fanout Exchange
- Логика: Игнорирует ключ маршрутизации и отправляет сообщение во все привязанные к нему очереди.
- Применение: Идеально подходит для широковещательной рассылки (broadcast), например, для системы уведомлений, где одно событие должны получить все активные подписчики.
-
Topic Exchange
- Логика: Маршрутизирует сообщения на основе совпадения ключа маршрутизации с шаблоном (паттерном) ключа привязки. В шаблонах используются символы:
*
(звездочка) — заменяет ровно одно слово.#
(решетка) — заменяет ноль или более слов.
- Применение: Гибкая реализация шаблона "Издатель-подписчик" (Pub/Sub). Например, ключ маршрутизации
logs.error.database
будет соответствовать привязкамlogs.error.*
иlogs.#
.
- Логика: Маршрутизирует сообщения на основе совпадения ключа маршрутизации с шаблоном (паттерном) ключа привязки. В шаблонах используются символы:
-
Headers Exchange
- Логика: Использует для маршрутизации не ключ, а значения в заголовках (
headers
) сообщения. Привязка очереди к обменнику также содержит набор пар "ключ-значение". - Применение: Используется для сложных сценариев маршрутизации, где недостаточно строковых ключей. Встречается реже остальных.
- Логика: Использует для маршрутизации не ключ, а значения в заголовках (