Лабораторная работа №4 — Работа с брокером сообщений
1. Цель работы
Изучение проектирования приложений при помощи брокера сообщений RabbitMQ.
2. Как запустить лабораторную работу
Предварительные требования:
- Установленный RabbitMQ Server
- Python 3.9+
- Библиотека pika
Запуск Tutorial 1
cd tut1
python receive.py
python send.py
Запуск Tutorial 2
cd tut2
python worker.py
python new_task.py
Запуск Tutorial 3
cd tut3
python receive_logs.py
python emit_log.py
Запуск основного приложения
cd app
python consumer1_slow.py
python consumer2_fast.py
python publisher.py
python consumer1_slow.py
python consumer1_slow.py
3. Структура проекта
tut1/ # Изучение туториала 1
tut2/ # Изучение туториала 2
tut3/ # Изучение туториала 3
app/ # Создание приложений, обрабатывающих очередь сообщений с разной скоростью
README.md # Документация проекта
Описание сервисов
tut1 — Базовая модель "производитель-потребитель". Демонстрирует отправку и получение простых сообщений через очередь.
tut2 — Модель распределения задач между несколькими worker'ами. Демонстрирует round-robin балансировку нагрузки и механизм подтверждения обработки сообщений (acknowledgment).
tut3 — Паттерн fanout exchange. Демонстрирует широковещательную рассылку сообщений всем подписчикам одновременно.
app - Система обработки заказов интернет-магазина. Publisher генерирует события заказов каждую секунду. Consumer 1 обрабатывает заказы медленно (2-3 секунды), Consumer 2 — мгновенно.
5. Результаты тестирования
Сценарий 1: Один экземпляр каждого consumer
Параметры:
- Publisher: 1 сообщение/секунду
- Consumer 1 (slow): 2.5 секунды/сообщение
- Consumer 2 (fast): мгновенная обработка
Результат:
- Очередь order_processing_slow: накапливаются сообщения
- Очередь order_processing_fast: 0 сообщений (успевает обрабатывать)
Вывод:
Consumer 1 не справляется с нагрузкой, так как скорость обработки (0.4 сообщения/сек) меньше скорости поступления (1 сообщение/сек).
Сценарий 2: Три экземпляра Consumer 1
Параметры:
- Publisher: 1 сообщение/секунду
- 3× Consumer 1 (slow): 2.5 секунды/сообщение каждый
- Consumer 2 (fast): мгновенная обработка
Результат:
- Очередь order_processing_slow: Спустя некоторое время пустеет и не копит более 1-2х сообщений
- Сообщения равномерно распределяются между тремя consumers RabbitMQ автоматически балансирует нагрузку (round-robin)
Вывод:
Три consumer справляются с нагрузкой. Суммарная скорость обработки (1.2 сообщения/сек) превышает скорость поступления (1 сообщение/сек). Демонстрируется горизонтальное масштабирование.
6. Используемые технологии
- Python 3.9 — язык программирования
- RabbitMQ — брокер сообщений
- Pika — Python клиент для RabbitMQ
- RabbitMQ Management UI — веб-интерфейс для мониторинга
7. Видео
Ссылка на видео работы RabbitMQ: Rutube


