Ответ
В 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) сообщения. Привязка очереди к обменнику также содержит набор пар "ключ-значение". - Применение: Используется для сложных сценариев маршрутизации, где недостаточно строковых ключей. Встречается реже остальных.
- Логика: Использует для маршрутизации не ключ, а значения в заголовках (