Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про RabbitMQ: rabbitmq, exchange

Какие типы Exchange бывают?

Этот вопрос проверяет знание ключевого компонента RabbitMQ — Exchange, который отвечает за маршрутизацию сообщений в очередях.

Короткий ответ

В RabbitMQ существуют четыре основных типа Exchange, которые определяют, как сообщение будет routed к очередям. Direct отправляет сообщение в очередь, чей routing key точно совпадает с ключом сообщения. Fanout просто рассылает копии сообщения во все привязанные к нему очереди, игнорируя routing key. Topic позволяет использовать шаблоны (с * и #) для гибкого сопоставления routing key. Headers игнорирует routing key и маршрутизирует сообщения на основе заголовков.

Длинный ответ

Exchange в RabbitMQ — это сущность, которая получает сообщения от продюсеров и перенаправляет их в очереди согласно определенным правилам (типу exchange и привязкам — bindings).

Основные типы Exchange:

  1. Direct Exchange

    • Принцип работы: Сравнивает routing key сообщения с routing key привязки очереди. Сообщение попадает в очередь только при полном совпадении.

    • Аналог из жизни: Точечная доставка письма по конкретному адресу.

    • Пример использования: Отправка задачи в конкретную очередь-обработчик (например, queue.payments).

  2. Fanout Exchange

    • Принцип работы: Рассылает копию каждого полученного сообщения во все очереди, которые к нему привязаны. Routing key игнорируется.

    • Аналог из жизни: Рассылка рекламной листовки всем жителям дома.

    • Пример использования: Уведомление всех подсистем о важном событии (например, "пользователь зарегистрировался"), когда каждая подсистема должна обработать это событие независимо.

  3. Topic Exchange

    • Принцип работы: Использует routing key, который представляет собой строку, разделенную точками (например, user.registered.email). Очередь привязывается с помощью шаблона, где * заменяет одно слово, а # — ноль или несколько слов.

    • Аналог из жизни: Подписка на новости по темам.

    • Пример использования:

      • Очередь с шаблоном *.error получит все сообщения об ошибках.

      • Очередь с шаблоном user.registered.* получит все сообщения о регистрации пользователя.

  4. Headers Exchange

    • Принцип работы: Игнорирует routing key. Маршрутизация основана на заголовках сообщения (аргументы headers). Привязка очереди указывает условия сопоставления (x-match: all — все заголовки должны совпасть, x-match: any — достаточно любого).

    • Пример использования: Более сложная маршрутизация, где ключ неудобно выражать строкой, например, отправка сообщения в зависимости от типа контента и версии API.

Вывод: Выбор типа Exchange зависит от требуемой логики маршрутизации. Direct — для точечной доставки, Fanout — для широковещательной рассылки, Topic — для гибкой маршрутизации по шаблонам, а Headers — для сложных условий, основанных на атрибутах сообщения.

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • RabbitMQ

    RabbitMQ

Ключевые слова

#rabbitmq

#exchange

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.