80 lines
5.7 KiB
Markdown
80 lines
5.7 KiB
Markdown
|
# Отчет по лабораторной работе №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)
|