Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Как организована доставка сообщений в RabbitMQ?

Проверяет понимание архитектуры RabbitMQ и механизмов маршрутизации сообщений.

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

Сообщения в RabbitMQ отправляются от producer к consumer через exchange. Exchange получает сообщение и решает, в какие очереди его направить, используя тип exchange (direct, fanout, topic, headers) и routing key. Consumer подписывается на очередь и получает сообщения.

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

Доставка сообщений в RabbitMQ происходит в 4 этапа:

  1. Producer публикует сообщение:
    Приложение-отправитель отправляет сообщение в exchange с указанием routing key.

    channel.basic_publish(
        	exchange='orders',
        	routing_key='new_order',
        	body='Order data'
    )
  2. Exchange маршрутизирует сообщение:
    Exchange определяет, в какие очереди отправить сообщение, основываясь на:

    • Типе exchange:

      • direct: Точное совпадение routing key (например, logs.error).

      • fanout: Всем очередям без фильтрации (broadcast).

      • topic: Шаблоны routing key (например, *.error).

      • headers: По атрибутам сообщения (редко используется).

    • Bindings: Связи между exchange и очередями с указанием routing key.

  3. Сообщение попадает в очередь:
    Очередь хранит сообщения до обработки. Если очередь не привязана к exchange, сообщение теряется.

  4. Consumer обрабатывает сообщение:
    Приложение-получатель подписывается на очередь и получает сообщения.

    def callback(ch, method, properties, body):
        	print(f"Received: {body}")
    
    channel.basic_consume(queue='orders', on_message_callback=callback)

Пример workflow:

  • Создание exchange и очереди:

    channel.exchange_declare(exchange='orders', exchange_type='direct')
    channel.queue_declare(queue='order_processing')
    channel.queue_bind(exchange='orders', queue='order_processing', routing_key='new_order')

Вывод:
RabbitMQ гарантирует гибкую доставку через связку exchange-очередь.

  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    2

  • Сложность:

    5

Навыки

  • RabbitMQ

    RabbitMQ

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

#rabbitmq

#messaging

#routing

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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