157 lines
8.5 KiB
Markdown
157 lines
8.5 KiB
Markdown
|
# Лабораторная работа №3 - REST API, Gateway и синхронный обмен между микросервисами
|
|||
|
|
|||
|
Цель: изучение шаблона проектирования gateway, построения синхронного обмена между микросервисами и архитектурного стиля RESTful API.
|
|||
|
|
|||
|
Задачи:
|
|||
|
|
|||
|
Создать 2 микросервиса, реализующих CRUD на связанных сущностях.
|
|||
|
Реализовать механизм синхронного обмена сообщениями между микросервисами.
|
|||
|
Реализовать шлюз на основе прозрачного прокси-сервера nginx.
|
|||
|
|
|||
|
# Создание микросервисов
|
|||
|
1-й микросервис - football-portal-application для сущности Портал футбольной тематики
|
|||
|
2-й микросервис - football-team-application для сущности Футбольная команда
|
|||
|
|
|||
|
Сущность: Футбольная команда (Football Team):
|
|||
|
|
|||
|
УИД (Уникальный идентификатор): Уникальный номер или код, идентифицирующий конкретную футбольную команду.
|
|||
|
Название (Name): Название футбольной команды.
|
|||
|
Год основания (Established Year): Год основания команды.
|
|||
|
Дивизион (Division): Дивизион или лига, в которой участвует команда.
|
|||
|
Тренер (Coach): Имя и фамилия тренера команды.
|
|||
|
УИД портала (portalUuid): УИД портала футбольной тематики, с которым данная команда связана. Это поле устанавливает связь "1-ко-многим" между командой и порталом.
|
|||
|
Информация о портале (portalInfo): Информация полученная по portalUuid и УИД портала о портале футбольной тематики. Хранит в себе информацию о Портале футбольной тематики (Name, Supported Platforms, Maximum Users).
|
|||
|
Сущность: Портал футбольной тематики (Football Portal):
|
|||
|
|
|||
|
УИД (Уникальный идентификатор): Уникальный номер или код, идентифицирующий конкретный портал футбольной тематики.
|
|||
|
Название (Name): Название портала футбольной тематики.
|
|||
|
Поддерживаемые платформы (Supported Platforms): Операционные системы и устройства, на которых работает портал (Web, iOS, Android и др.).
|
|||
|
Максимальное количество пользователей (Maximum Users): Максимальное количество пользователей, которые могут зарегистрироваться на портале.
|
|||
|
Связь "1-ко-многим" между этими сущностями реализуется через поле "УИД портала" в сущности "Футбольная команда". Каждая команда связывается с конкретным порталом футбольной тематики через УИД этого портала, и это позволяет одному порталу быть связанным с несколькими футбольными командами.
|
|||
|
|
|||
|
Пример модели "Портал футбольной тематики" для списка:
|
|||
|
{
|
|||
|
"uuid": "8f036445-a5bd-401c-926e-840f9de795cd",
|
|||
|
"Name": "FootballHub",
|
|||
|
"Supported Platforms": "Web, iOS, Android",
|
|||
|
"Maximum Users": 100000
|
|||
|
}
|
|||
|
|
|||
|
Пример модели "Портал футбольной тематики" для создания или изменения:
|
|||
|
{
|
|||
|
"uuid": "8f036445-a5bd-401c-926e-840f9de795cd",
|
|||
|
"Name": "FootballHub",
|
|||
|
"Supported Platforms": "Web, iOS, Android",
|
|||
|
"Maximum Users": 100000
|
|||
|
}
|
|||
|
|
|||
|
Пример модели "Футбольная команда" для списка:
|
|||
|
{
|
|||
|
"uuid": "8740d660-b251-4272-8535-be7ec3748d4b",
|
|||
|
"Name": "FC Red Stars",
|
|||
|
"Established Year": 1990,
|
|||
|
"Division": "Premier League",
|
|||
|
"Coach": "John Smith",
|
|||
|
"portalUuid": "8f036445-a5bd-401c-926e-840f9de795cd"
|
|||
|
}
|
|||
|
|
|||
|
Пример модели "Футбольная команда" для создания или изменения:
|
|||
|
{
|
|||
|
"Name": "FC Red Stars",
|
|||
|
"Established Year": 1990,
|
|||
|
"Division": "Premier League",
|
|||
|
"Coach": "John Smith",
|
|||
|
"portalUuid": "8f036445-a5bd-401c-926e-840f9de795cd"
|
|||
|
}
|
|||
|
|
|||
|
Пример модели "Футбольная команда" для подробностей:
|
|||
|
{
|
|||
|
"uuid": "8740d660-b251-4272-8535-be7ec3748d4b",
|
|||
|
"Name": "FC Red Stars",
|
|||
|
"Established Year": 1990,
|
|||
|
"Division": "Premier League",
|
|||
|
"Coach": "John Smith",
|
|||
|
"portalUuid": "8f036445-a5bd-401c-926e-840f9de795cd",
|
|||
|
"portalInfo": {
|
|||
|
"Name": "FootballHub",
|
|||
|
"Supported Platforms": "Web, iOS, Android",
|
|||
|
"Maximum Users": 100000
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
<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>
|
|||
|
-Использования базового образа, установка рабочий директории, копирования jar файла, экспорт порта, запуск приложения при запуске контейнера
|
|||
|
<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>
|
|||
|
<div>Swagger 2-го микросервиса</div>
|
|||
|
<img src="screens/img14.png" width="650" title="Swagger 2-го микросервиса">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img15.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img16.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img17.png" width="650">
|
|||
|
</p>
|
|||
|
<p>
|
|||
|
<img src="screens/img18.png" width="650">
|
|||
|
</p>
|
|||
|
|
|||
|
# Видео
|
|||
|
|
|||
|
Видео с разбором лабораторной работы - https://drive.google.com/file/d/1o9Ao5Q6TP-UcOb_49SbRwackclGTJOYD/view?usp=sharing
|