forked from Alexey/DAS_2024_1
48 lines
4.6 KiB
Markdown
48 lines
4.6 KiB
Markdown
|
# Отчет. Лабораторная работа 4
|
|||
|
|
|||
|
## Описание
|
|||
|
|
|||
|
В ходе лабораторной работы были изучены главы туториала по работе с RabbitMQ, в результате чего получен отчет о выполнении заданий каждой главы, представленный на скриншотах в папке /images:
|
|||
|
|
|||
|
- Первый туториал:
|
|||
|

|
|||
|
- Второй туториал:
|
|||
|

|
|||
|
- Третий туториал:
|
|||
|
[Tutorial-3](./images/Tutorial-3.png)
|
|||
|
|
|||
|
Чтобы продемонстрировать работу сервисов посредством ассинхронного общения через брокер сообщений RabbitMQ была выбрана предметная область администрирования компьютеров, где мы отслеживаем события включения компьютеров.
|
|||
|
|
|||
|
Сервис-издатель "Publisher" публикует в очередь сообщений событие поступления заказа с некоторым номером. Сервисы-подписчики обрабатывают сообщения о заказах, при этом подписчики обрабатывают сообщение по-разному: один вид подписчика обрабатывает его со задержкой несколько секунд, другой - "мгновенно", они получают одни и те же сообщения, но соединены с разными очередями.
|
|||
|
|
|||
|
В качестве эксперимента изначально были запущены по одному экземпляру каждого вида. На Consumer2.png представлена работа мгновенно обрабатывающего подписчика, справляющегося с нагрузкой без увеличения размера очереди:
|
|||
|

|
|||
|
На Consumer1.png представлена работа подписчика, обрабатывающего сообщения с задержкой. В очереди накапливаются сообщения в состоянии 'Ready', которые готовы для того чтобы быть доставленными подписчикам. Сервис не справляется с нагрузкой, так как отправляются сообщения быстрее, чем обрабатываются:
|
|||
|

|
|||
|
Чтобы обеспечить равную скорость отправки и обработки, увеличивается количество экземпляров-подписчиков данного типа до трех. На Consumer1-scaling.png видно, что теперь длина очереди не растет и система справляется с поступающими сообщениями. Скорость "publish" и "consumer ack" также становится равной:
|
|||
|

|
|||
|
|
|||
|
## Как запустить
|
|||
|
|
|||
|
Для того, чтобы запустить сервисы, необходимо выполнить следующие действия:
|
|||
|
|
|||
|
1. Установить и запустить Docker Engine или Docker Desktop
|
|||
|
2. Через консоль перейти в папку, в которой расположен файл docker-compose.yml
|
|||
|
3. Выполнить команду для запуска брокера сообщений rabbitmq:
|
|||
|
|
|||
|
```
|
|||
|
docker compose up rabbit -d
|
|||
|
```
|
|||
|
|
|||
|
4. Выполнить команду для запуска остальных контейнеров:
|
|||
|
|
|||
|
```
|
|||
|
docker compose up -d
|
|||
|
```
|
|||
|
|
|||
|
Такой порядок запуска важен для того, чтобы брокер сообщений успел полностью запуститься и произвести действия для того, чтобы быть готовым принимать соединения от сервисов. Потому что указания depends_on не хватает для отслеживания завершения всех необходимых подготовительных процессов брокера.
|
|||
|
|
|||
|
## Видео-отчет
|
|||
|
|
|||
|
Работоспособность лабораторной работы можно оценить в следующем [видео]https://zyzf.space/s/iWxb6b4EFQjPias).
|