50 lines
4.7 KiB
Markdown
50 lines
4.7 KiB
Markdown
|
# Отчет. Лабораторная работа 4
|
|||
|
|
|||
|
## Описание
|
|||
|
В ходе лабораторной работы были изучены главы туториала о работе с RabbitMQ. Результат выполнения заданий каждой главы
|
|||
|
отражен на скриншотах в папке /images:
|
|||
|
- Tutorial-Task1.png
|
|||
|

|
|||
|
- Tutorial-Task2.png
|
|||
|

|
|||
|
- Tutorial-Task3.png
|
|||
|

|
|||
|
|
|||
|
Задание из 3-ей главы туториала было расширено условиями, которые были поставлены в задании к данной лабораторной работе.
|
|||
|
Для демонстрации работы сервисов посредством ассинхронного общения через брокер сообщений RabbitMQ была выбрана
|
|||
|
предметная область "Обработка заказов".
|
|||
|
|
|||
|
Сервис-издатель "Publisher" публикует в очередь сообщений событие поступления заказа с некоторым номером.
|
|||
|
|
|||
|
Сервисы-подписчики обрабатывают сообщения о заказах, при этом подписчики обрабатывают сообщение по-разному. Один вид
|
|||
|
подписчика обрабатывает с задержкой в несколько секунд, другой - "мгновенно", они получают одни и те жа сообщения,
|
|||
|
но соединены с разными очередями.
|
|||
|
В качестве эксперимента изначально были запущены по одному экземпляру каждого вида.
|
|||
|
На изображении Consumer2.png представлена работа мгновенно обрабатывающего подписчика. Он справляется с нагрузкой,
|
|||
|
так как размер очереди не растет.
|
|||
|

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

|
|||
|
Для того, чтобы обеспечить равную скорость отправки и обработки, увеличиваем количество экземпляров-подписчиков данного типа до трех.
|
|||
|
На изображении видно, что теперь длина очереди не растет и система справляется с поступающими сообщениями. Также скорость "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://disk.yandex.ru/i/G0vsfp7vwazYHw).
|