50 lines
3.9 KiB
Markdown
50 lines
3.9 KiB
Markdown
# Лабораторная работа №4 - Работа с брокером сообщений
|
||
|
||
**Цель**: изучение проектирования приложений при помощи брокера сообщений.
|
||
|
||
**Задачи**:
|
||
|
||
1. Установить брокер сообщений RabbitMQ.
|
||
2. Пройти уроки 1, 2 и 3 из [RabbitMQ Tutorials](https://www.rabbitmq.com/getstarted.html) на любом языке программирования.
|
||
3. Продемонстрировать работу брокера сообщений.
|
||
|
||
**Предметная область**: заказ пиццы.
|
||
|
||
**Как запустить лабораторную работу**:
|
||
|
||
1) Установить и запустить RabbitMQ.
|
||
2) Установить зависимости Python с помощью команды pip install pika.
|
||
3) Запустить в 3-х разных терминалах:
|
||
Терминал 1 - python publisher.py (Издатель)
|
||
Терминал 2 - python consumer_1.py (Медленный обработчик)
|
||
Терминал 3 - python consumer_2.py (Быстрый обработчик)
|
||
4) Остановка работы - Ctrl+C.
|
||
|
||
**Что она делает**
|
||
|
||
Данное приложение реализует систему обработки заказов пиццы с использованием асинхронной архитектуры на основе RabbitMQ. Система состоит из трех основных компонентов: издателя (Publisher) и двух типов потребителей (Consumer). Издатель каждую секунду генерирует новые заказы пиццы с различными параметрами, такими как тип пиццы, имя клиента и статус заказа, и публикует эти события в exchange типа fanout. Exchange типа fanout обеспечивает доставку каждого сообщения во все привязанные к нему очереди одновременно.
|
||
|
||
Первый потребитель (Consumer 1) создает собственную именованную очередь и обрабатывает сообщения с задержкой 2-3 секунды, имитируя медленный процесс обработки заказа. Второй потребитель (Consumer 2) также создает свою очередь с другим именем, но обрабатывает сообщения мгновенно, демонстрируя быструю обработку. Оба потребителя используют механизм подтверждения обработки сообщений, что гарантирует надежную доставку.
|
||
|
||
**Какие технологии использовали**:
|
||
|
||
Python + pika библиотека
|
||
RabbitMQ - брокер сообщений
|
||
AMQP протокол
|
||
Fanout Exchange - рассылка всем очередям
|
||
Message Queues - асинхронная обработка
|
||
Publisher-Subscriber паттерн
|
||
Работает на localhost, порт по умолчанию 5672.
|
||
|
||
**Пример работы**:
|
||
|
||

|
||
|
||

|
||
|
||
**Вывод о скорости обработки _consumer_-ами событий от _publisher_-а**:
|
||
|
||
RabbitMQ автоматически распределяет сообщения между всеми Consumer'ами одной очереди. Добавление большего количества Consumer'ов позволяет обрабатывать сообщения быстрее. При достаточном количестве Consumer'ов очередь перестает расти.
|
||
|
||
**Ссылка на видео**:
|
||
https://vkvideo.ru/video-233171473_456239021 |