DAS_2023_1/belyaeva_ekaterina_lab_3/README.md

112 lines
4.1 KiB
Markdown
Raw Normal View History

2024-01-11 20:12:15 +04:00
# Лабораторная работа №3
## Задание
Цель: изучение шаблона проектирования gateway, построения синхронного обмена между микросервисами и архитектурного стиля RESTful API.
Задачи:
- Создать 2 микросервиса, реализующих CRUD на связанных сущностях.
- Реализовать механизм синхронного обмена сообщениями между микросервисами.
- Реализовать шлюз на основе прозрачного прокси-сервера nginx.
## Ход работы
### Разворачивание сервисов:
Были разработаны два приложения на Java с использованием средства автоматизации сборки проектов Gradle и с использованием библиотеки spring-boot:
- disciplineService - работа с дисциплинами (crud)
- learningPlanService - работа с планами обучения (crud). При создании плана обучения выбирается id дисциплины, и через nginx и rest template происходит получение данных о дисциплины с этим id
### Обмен сообщениями
При создании плана обучения выбирается id дисциплины, и через nginx и rest template происходит получение данных о дисциплины с этим id
![img.png](img.png)
### Dockerfile
Идентичные докерфайлы для приложений:
```
FROM openjdk:17
RUN mkdir -p /usr/src/app/
WORKDIR /usr/src/app/
COPY . /usr/src/app/
RUN ./gradlew clean build
EXPOSE 8089
ENTRYPOINT ["java","-jar","build/libs/lab3-0.0.1-SNAPSHOT.jar"]
```
### docker-compose.yml
Файл, соединяющий сервисы (содержащий настройку Docker):
```
version: "3" #формат конфигурации Docker Compose версии 3
services: #определение сервисов
discipline:
build:
context: /disciplineService #путь к контексту сборки
dockerfile: Dockerfile #имя докерфайла
ports:
- "8089:8089" #проброс портов
networks:
- netwrk #сеть
learning_plan:
build:
context: /learningPlanService #путь к контексту сборки
dockerfile: Dockerfile #имя докерфайла
ports:
- "8090:8090" #проброс портов
networks:
- netwrk #сеть
nginx:
image: nginx:latest #образ для контейнера
ports:
- "8091:80" #проброс портов
networks:
- netwrk #сеть
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf #монтирует локальный файл конфигурации
depends_on: #зависимость от сервисов
- discipline
- learning_plan
networks:
netwrk:
driver: bridge #изолированная сеть
```
### nginx.conf
Настройка nginx:
```
http {
server {
listen 80;
listen [::]:80;
server_name localhost;
location /disciplineService/ {
proxy_pass http://discipline:8089/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /disciplineService;
}
location /learningPlanService/ {
proxy_pass http://learning_plan:8090/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Prefix /learningPlanService;
}
}
}
events {
worker_connections 1024;
}
```
## Результат
Работоспособность и взаимодействие сервисов показаны в видео: [lab3.mp4](lab3.mp4)