168 lines
9.1 KiB
Markdown
168 lines
9.1 KiB
Markdown
|
# Лабораторная работа №3 - REST API, Gateway и синхронный обмен между микросервисами
|
|||
|
|
|||
|
Цель: изучение шаблона проектирования gateway, построения синхронного обмена между микросервисами и архитектурного стиля RESTful API.
|
|||
|
|
|||
|
Задачи:
|
|||
|
|
|||
|
Создать 2 микросервиса, реализующих CRUD на связанных сущностях.
|
|||
|
Реализовать механизм синхронного обмена сообщениями между микросервисами.
|
|||
|
Реализовать шлюз на основе прозрачного прокси-сервера nginx.
|
|||
|
|
|||
|
# Создание микросервисов
|
|||
|
1-й микросервис - video-conferencing-application для сущности Приложение для видеоконференций
|
|||
|
2-й микросервис - webcam-application для сущности Веб-камера
|
|||
|
|
|||
|
Сущность: Веб-камера (Webcam):
|
|||
|
1. УИД (Уникальный идентификатор): Уникальный номер или код, идентифицирующий конкретную веб-камеру.
|
|||
|
2. Модель (Model): Название и модель веб-камеры.
|
|||
|
3. Разрешение (Resolution): Максимальное разрешение видеозаписи, которое может предоставить веб-камера.
|
|||
|
4. Интерфейс (Interface): Тип интерфейса для подключения к компьютеру (USB, Wi-Fi и т.д.).
|
|||
|
5. УИД видеоконференции (subscriptionUuid): УИД видеоконференции, с которым данная веб-камера связана. Это поле устанавливает связь "1-ко-многим" между веб-камерой и приложением.
|
|||
|
6. Информация о видеоконференции (subscriptionInfo): Информация полученная по subscriptionUuid и УИД видеоконференций о приложении для видеоконференции. Хранит в себе информацию об Приложение для видеоконференций (Name, Supported Platforms, Maximum Participants)
|
|||
|
|
|||
|
Сущность: Приложение для видеоконференций (Video Conferencing Application):
|
|||
|
1. УИД (Уникальный идентификатор): Уникальный номер или код, идентифицирующий конкретное приложение для видеоконференций.
|
|||
|
2. Название (Name): Название приложения для видеоконференций.
|
|||
|
3. Поддерживаемые платформы (Supported Platforms): Операционные системы и устройства, на которых работает приложение (Windows, macOS, iOS, Android и др.).
|
|||
|
4. Максимальное количество участников (Maximum Participants): Максимальное количество пользователей, которое может присоединиться к одной видеоконференции.
|
|||
|
|
|||
|
Связь "1-ко-многим" между этими сущностями реализуется через поле "УИД приложения" в сущности "Веб-камера". Каждая веб-камера связывается с конкретным приложением для видеоконференций через УИД этого приложения, и это позволяет одному приложению быть связанным с несколькими веб-камерами.
|
|||
|
|
|||
|
Вот примеры моделей для запросов:
|
|||
|
Пример модели "Приложение для видеоконференций" для списка:
|
|||
|
{
|
|||
|
"uuid": "8f036445-a5bd-401c-926e-840f9de795cd",
|
|||
|
"Name": "Zoom",
|
|||
|
"Supported Platforms": "Windows, macOS, iOS, Android",
|
|||
|
"Maximum Participants": 500
|
|||
|
}
|
|||
|
Пример модели "Приложение для видеоконференций" для создания или изменения:
|
|||
|
{
|
|||
|
"uuid": "8f036445-a5bd-401c-926e-840f9de795cd",
|
|||
|
"Name": " Zoom",
|
|||
|
"Supported Platforms": "Windows, macOS, iOS, Android",
|
|||
|
"Maximum Participants": 500
|
|||
|
}
|
|||
|
Пример модели "Веб-камера" для списка:
|
|||
|
{
|
|||
|
"uuid": "8740d660-b251-4272-8535-be7ec3748d4b",
|
|||
|
"Model": "Logitech C920",
|
|||
|
"Resolution": "Full HD 1080p",
|
|||
|
"Interface": "USB",
|
|||
|
"subscriptionUuid": "8f036445-a5bd-401c-926e-840f9de795cd"
|
|||
|
}
|
|||
|
Пример модели "Веб-камера" для создания или изменения:
|
|||
|
{
|
|||
|
"Model": " Logitech C920",
|
|||
|
"Resolution": " Full HD 1080p ",
|
|||
|
"Interface": "USB",
|
|||
|
"subscriptionUuid": "8f036445-a5bd-401c-926e-840f9de795cd"
|
|||
|
}
|
|||
|
Пример модели "Веб-камера" для подробностей:
|
|||
|
{
|
|||
|
"uuid": "8740d660-b251-4272-8535-be7ec3748d4b",
|
|||
|
"Model": "Logitech C920",
|
|||
|
"Resolution": "Full HD 1080p",
|
|||
|
"Interface": "USB",
|
|||
|
"subscriptionUuid": "8f036445-a5bd-401c-926e-840f9de795cd",
|
|||
|
"subscriptionInfo": {
|
|||
|
"Name": "Zoom",
|
|||
|
"Supported Platforms": "Windows, macOS, iOS, Android",
|
|||
|
"Maximum Participants": 500
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
<p>
|
|||
|
<div>Структура 1-го микросервиса</div>
|
|||
|
<img src="screens/img1.png" width="650" title="Структура 1-го микросервиса">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<div>Структура 2-го микросервиса</div>
|
|||
|
<img src="screens/img2.png" width="650" title="Структура 2-го микросервиса">
|
|||
|
</p>
|
|||
|
- контроллеры для обработка запросов, дтошки для выбора что изображать в сваггере при запросах, модели для сущностей, репозитории для отправки данных, сервисы для бизнес-логики
|
|||
|
|
|||
|
# Докер файлы, докер компоус, nginx
|
|||
|
|
|||
|
<p>
|
|||
|
<div>Докер файл для 1-го микросервиса</div>
|
|||
|
<img src="screens/img3.png" width="650" title="Докер файл для 1-го микросервиса">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<div>Докер файл для 2-го микросервиса</div>
|
|||
|
<img src="screens/img4.png" width="650" title="Докер файл для 2-го микросервиса">
|
|||
|
</p>
|
|||
|
-Использования базового образа, установка рабочий директории, копирования джар файла, экспорт порта, запуск приложения при запуске контейнера
|
|||
|
<p>
|
|||
|
<div>Докер компоус</div>
|
|||
|
<img src="screens/img5.png" width="650" title="Докер компоус">
|
|||
|
</p>
|
|||
|
-создания общей сети для всех сервисов, запуск образов сервисов, проброска портов, копирования конфигурационного файла nginx и запуск этого сервиса после запуска других сервисов
|
|||
|
<p>
|
|||
|
<div>nginx</div>
|
|||
|
<img src="screens/img6.png" width="650" title="nginx">
|
|||
|
</p>
|
|||
|
установка количества одновремменных подключений, прослушка запросов по 80 порту, серверное имя локалхост, адрес для переадресации запросов по нему, url переадрусации
|
|||
|
<p>
|
|||
|
<div>Скрин созданых образов</div>
|
|||
|
<img src="screens/img7.png" width="650" title="Скрин созданых образов">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<div>Скрин созданых контейнеров</div>
|
|||
|
<img src="screens/img8.png" width="650" title="Скрин созданых контейнеров">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<div>Swagger 1-го микросервиса</div>
|
|||
|
<img src="screens/img9.png" width="650" title="Swagger 1-го микросервиса">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img10.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img11.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img12.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img13.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img14.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img15.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img16.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<div>Swagger 2-го микросервиса</div>
|
|||
|
<img src="screens/img17.png" width="650" title="Swagger 2-го микросервиса">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img18.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img19.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img20.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img21.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img22.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img23.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img24.png" width="650">
|
|||
|
</p>
|
|||
|
|
|||
|
# Видео
|
|||
|
|
|||
|
Видео с разбором лабораторной работы - https://youtu.be/FpiSDxH4FSU
|