# Лабораторная работа №4 ## Описание Задание 1 из туториала: ![task1.jpg](results/task1.jpg) Задание 2 из туториала: ![task2.jpg](results/task2.jpg) Задание 3 из туториала: ![task3.jpg](results/task3.jpg) Также были созданы файлы Consumer1, Consumer2 и Publisher для обработки событий в сфере онлайн-магазина Publisher: • Создает обменник типа fanout с именем online_store_events. • Каждую секунду генерирует сообщения в формате JSON, описывающие различные события в магазине. • Отправляет сообщения в обменник. Consumer 1: • Создает очередь с именем order_processing_queue. • Создает привязку к обменнику online_store_events. • Принимает сообщения из очереди. • Обрабатывает сообщения, симулируя обработку заказа (использует time.sleep(2)). • Выводит в консоль информацию о полученном сообщении. Consumer 2: • Создает очередь с именем product_recommendation_queue. • Создает привязку к обменнику online_store_events. • Принимает сообщения из очереди. • Обрабатывает сообщения мгновенно, симулируя создание рекомендаций (использует print(f"Обработка рекомендации: {message}")). • Выводит в консоль информацию о полученном сообщении. ## Вывод работы Для того, чтобы сделать вывод, необходимо подождать некоторое время, тогда можно будет увидеть, что количество сообщений в order_processing_queue будет больше, чем в product_recommendation_queue, так как во второй очереди происходит мгновенная обработка сообщений. Если запустить несколько Consumer-1, то количество сообщений в order_processing_queue снизится, так как несколько экземпляров первого consumer будут работать параллельно, и RabbitMQ будет распределять входящие сообщения между ними (это называется "разделение нагрузки"). ![Consumer-1.jpg](results/Consumer-1.jpg) ![Consumer-3.jpg](results/Consumer-3.jpg) ## Видео Работоспособность представлена на [видео](https://vk.com/video204968285_456240928).