# Лабораторная работа №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. **Пример работы**: ![alt text](pizza_order/image_2.png) ![alt text](pizza_order/image.png) **Вывод о скорости обработки _consumer_-ами событий от _publisher_-а**: RabbitMQ автоматически распределяет сообщения между всеми Consumer'ами одной очереди. Добавление большего количества Consumer'ов позволяет обрабатывать сообщения быстрее. При достаточном количестве Consumer'ов очередь перестает расти. **Ссылка на видео**: https://vkvideo.ru/video-233171473_456239021