Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Какова модель работы RabbitMQ: какие сущности в ней присутствуют, какие существуют типы exchange и чем отличаются direct, fanout и headers-exchange?

Вопрос проверяет знание архитектурных сущностей RabbitMQ и понимание того, как сообщения маршрутизируются через exchange.

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

RabbitMQ состоит из очередей, обменников и привязок между ними. Сообщения отправляются не в очередь напрямую, а в exchange, который решает, в какую очередь их направить. Direct-exchange маршрутизирует по точному ключу, fanout рассылает сообщение во все очереди без условий, а headers-exchange использует соответствие заголовкам. Эта модель даёт гибкость маршрутизации и позволяет строить разные архитектуры взаимодействия сервисов.

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

Модель работы RabbitMQ

Сердро RabbitMQ — концепция маршрутизации сообщений через exchange.

1. Основные сущности RabbitMQ

  1. Producer — отправитель сообщений

  2. Exchange — маршрутизатор сообщений

  3. Queue — очередь сообщений (FIFO)

  4. Binding — связь между exchange и очередью

  5. Consumer — получатель сообщений

  6. Routing key — ключ маршрутизации

Определение: Exchange — точка, которая принимает сообщения от продюсеров и направляет в очереди согласно правилам.

2. Взаимодействие

Процесс доставки сообщения:

  1. producer → отправляет сообщение

  2. exchange → выбирает подходящие очереди

  3. queue → хранит сообщение

  4. consumer → читает сообщение

Прямой отправки в очередь не происходит — только через exchange.

3. Типы exchange

Существует несколько типов обменников:

  1. direct

  2. fanout

  3. topic

  4. headers

Вопрос фокусируется на первых трёх, кроме topic.


Direct exchange

Определение: Direct exchange — маршрутизатор, который направляет сообщения по точному совпадению routing key.

Пример:

php

// binding: queueA ← ("key1")
// routing key: "key1" → попадёт в queueA

Используется, когда:

  • нужно точное соответствие маршрутов

  • разные типы задач идут в разные очереди

  • логика проста и предсказуема


Fanout exchange

Определение: Fanout exchange — рассылает сообщение во все очереди, привязанные к exchange, независимо от ключей.

Пример:

  • очередь A ← получит

  • очередь B ← получит

  • очередь C ← получит

Применение:

  • широковещательная рассылка

  • обновления кеша

  • нотификации всем воркерам

  • события pub/sub


Headers exchange

Определение: Headers exchange маршрутизирует сообщения на основе заголовков, а не ключей.

Пример:

Binding:

x-match = all  
type = "audit"  
env = "prod"

Сообщение попадёт в очередь, если оба заголовка совпадают.

Применение:

  • сложные правила маршрутизации

  • когда routing key недостаточно

  • когда фильтрация происходит по множеству параметров


4. Сравнение типов exchange перечислением

  • direct
    маршрутизация по точному ключу

  • fanout
    широковещательная рассылка во все очереди

  • headers
    маршрутизация по заголовкам сообщения (поддерживает AND/OR логику)


5. Вывод

RabbitMQ обеспечивает гибкую маршрутизацию сообщений через обменники. Direct подходит для точного распределения задач, fanout — для широковещательных рассылок, а headers — для сложных правил фильтрации.

  • Аватар

    PHP Guru

    Mikhail Savin

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • RabbitMQ

    RabbitMQ

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

#exchange

#queue

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

  • Аватар

    PHP Guru

    Mikhail Savin

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