Files
2025-10-17 16:48:10 +04:00
..
2025-10-17 16:48:10 +04:00
2025-10-17 16:48:10 +04:00
2025-10-17 16:48:10 +04:00
2025-10-17 16:48:10 +04:00
2025-10-17 16:48:10 +04:00
2025-10-17 16:48:10 +04:00

Лабораторная работа №4 — Работа с брокером сообщений

1. Цель работы

Изучение проектирования приложений при помощи брокера сообщений RabbitMQ.

2. Как запустить лабораторную работу

Предварительные требования:

  • Установленный RabbitMQ Server
  • Python 3.9+
  • Библиотека pika

Запуск Tutorial 1

cd tut1
python receive.py
python send.py

alt text

Запуск Tutorial 2

cd tut2
python worker.py
python new_task.py

alt text

Запуск Tutorial 3

cd tut3
python receive_logs.py
python emit_log.py

alt text

Запуск основного приложения

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. Используемые технологии

  1. Python 3.9 — язык программирования
  2. RabbitMQ — брокер сообщений
  3. Pika — Python клиент для RabbitMQ
  4. RabbitMQ Management UI — веб-интерфейс для мониторинга

7. Видео

Ссылка на видео работы RabbitMQ: Rutube