# Отчет по лабораторной работе №4

## Поставленные задачи

1. Установить брокер сообщений RabbitMQ.
2. Пройти уроки 1, 2 и 3 из RabbitMQ Tutorials на любом языке программирования.
3. Продемонстрировать работу брокера сообщений.

## Предметная область

Уведомление о штрафах за нарушение ПДД.

## Запуск работы

1. Убедиться, что установлены необходимые технологии:
   - **Docker**: Платформа для контейнеризации приложений.
   - **RabbitMQ**: Брокер сообщений.
   - **Docker Compose**: Инструмент для запуска многоконтейнерных приложений на основе `docker-compose.yaml`. Обычно поставляется вместе с Docker. Чтобы проверить, установлена ли утилита, нужно запустить команду:
    ```bash
        docker-compose --version
    ```

2. В директории, где находится файл `docker-compose.yaml`, выполнить следующую команду для запуска всех сервисов:
    ```bash
        docker-compose up --build
    ```
    Эта команда сначала выполнит сборку, а затем запустит контейнеры.
    
3. После успешного запуска можно перейти на RabbitMQ Management UI:
   - RabbitMQ Management UI: [http://localhost:15672/#/](http://localhost:15672/#/).

## Технологии

1. Golang: основной язык программирования.
2. Docker & Docker Compose: для контейнеризации сервисов и удобного развертывания.
3. RabbitMQ: брокер сообщений.

## Анализ полученных данных

![SlowQueueResult.png](ReportImages%2FSlowQueueResult.png)
   Для замедленной очереди можно сделать следующие выводы:
   - Все 366 сообщений доставлены потребителям, но они еще не подтверждены. 
     Поскольку "Ready" равен нулю, это означает, что все сообщения сразу передаются потребителям, 
     и ни одно сообщение не ожидает очереди.
   - Однако, поскольку все 366 сообщений находятся в состоянии "Unacked", 
     это указывает на то, что потребитель не подтверждает обработку сообщений вовремя, 
     что связано с медленной обработкой (как предполагает название очереди slow_consumer_queue).
   - Публикация сообщений идет с постоянной скоростью 1 сообщение в секунду, 
     и с той же скоростью сообщения доставляются потребителю.
   - Однако скорость подтверждения (Consumer ack) составляет лишь 0.60 сообщений в секунду, 
     что означает, что потребитель обрабатывает и подтверждает сообщения медленнее, чем они поступают. 
     Это вызывает накопление неподтвержденных сообщений в очереди (Unacked), и со временем их число 
     может продолжать расти, если скорость обработки не увеличится.

![FastQueueResult.png](ReportImages%2FFastQueueResult.png)
   Для быстрой очереди можно сделать следующие выводы:
   - Очередь пуста. Т.е. нет сообщений, которые ожидают обработки или находятся в процессе обработки. 
     Это означает, что потребитель обрабатывает сообщения сразу после их получения, и сообщения не 
     накапливаются в очереди.
   - Сообщения публикуются и доставляются потребителю со скоростью 1 сообщение в секунду, и 
     потребитель подтверждает обработку каждого сообщения также со скоростью 1 сообщение в секунду.
   - Поскольку скорость подтверждения и доставки совпадают, сообщений не накапливается, и все 
     обрабатывается своевременно.

## Ход работы

1. **Прохождение первого урока**: директория FirstTutorial
   ![FirstTutorial.png](ReportImages%2FFirstTutorial.png)

2. **Прохождение второго урока**: директория SecondTutorial
   ![SecondTutorial.png](ReportImages%2FSecondTutorial.png)

3. **Прохождение третьего урока и выполнение задания на ЛР №3**: директория ThirdTutorial
   ![ThirdTutorial.png](ReportImages%2FThirdTutorial.png)

В коде присутствуют пояснительные комментарии.

## Демонстрационное видео

Видеозапись доступна по адресу: [https://vk.com/video193898050_456240872](https://vk.com/video193898050_456240872)