bondarenko_max_lab_3
This commit is contained in:
parent
9ff5b267bc
commit
287fb33386
@ -1,2 +1,108 @@
|
|||||||
# Лабораторная работа 3 - REST API, Gateway и синхронный обмен между микросервисами
|
# Лабораторная работа 3 - REST API, Gateway и синхронный обмен между микросервисами
|
||||||
### ПИбд-42 || Бондаренко Максим
|
### ПИбд-42 || Бондаренко Максим
|
||||||
|
|
||||||
|
> Цель:
|
||||||
|
Изучение шаблона проектирования gateway, построения синхронного обмена между микросервисами и архитектурного стиля RESTful API.
|
||||||
|
|
||||||
|
> Задачи:
|
||||||
|
1. Создать 2 микросервиса, реализующих CRUD на связанных сущностях.
|
||||||
|
2. Реализовать механизм синхронного обмена сообщениями между микросервисами.
|
||||||
|
3. Реализовать шлюз на основе прозрачного прокси-сервера nginx.
|
||||||
|
|
||||||
|
> Описание
|
||||||
|
В данной лабораторной работе мы разворачиваем два микросервиса:
|
||||||
|
|
||||||
|
1. Authors - микросервис для управления авторами.
|
||||||
|
2. Books - микросервис для управления книгами.
|
||||||
|
|
||||||
|
> Файлы-конфигурации
|
||||||
|
1. docker-compose.yml
|
||||||
|
```
|
||||||
|
version: '3.7'
|
||||||
|
|
||||||
|
services:
|
||||||
|
authors:
|
||||||
|
build:
|
||||||
|
context: ./authors
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
networks:
|
||||||
|
- app-network
|
||||||
|
|
||||||
|
books:
|
||||||
|
build:
|
||||||
|
context: ./books
|
||||||
|
ports:
|
||||||
|
- "3001:3001"
|
||||||
|
networks:
|
||||||
|
- app-network
|
||||||
|
depends_on:
|
||||||
|
- authors
|
||||||
|
|
||||||
|
nginx:
|
||||||
|
image: nginx:latest
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
volumes:
|
||||||
|
- ./nginx.conf:/etc/nginx/nginx.conf
|
||||||
|
depends_on:
|
||||||
|
- authors
|
||||||
|
- books
|
||||||
|
networks:
|
||||||
|
- app-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
app-network:
|
||||||
|
driver: bridge
|
||||||
|
```
|
||||||
|
|
||||||
|
authors: Микросервис, отвечающий за управление данными об авторах, доступный на порту 3000.
|
||||||
|
books: Микросервис, отвечающий за управление данными о книгах, доступный на порту 3001. Зависит от микросервиса authors.
|
||||||
|
nginx: Сервис, работающий как обратный прокси-сервер, маршрутизирующий запросы к другим сервисам authors и books, слушая на порту 80.
|
||||||
|
|
||||||
|
2. nginx.conf
|
||||||
|
```
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
upstream authors_service {
|
||||||
|
server authors:3000;
|
||||||
|
}
|
||||||
|
|
||||||
|
upstream books_service {
|
||||||
|
server books:3001;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
|
||||||
|
location /authors {
|
||||||
|
proxy_pass http://authors_service;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /books {
|
||||||
|
proxy_pass http://books_service;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
location /authors: Все запросы, начинающиеся с /authors, будут проксироваться к микросервису authors, который работает на порту 3000.
|
||||||
|
location /books: Все запросы, начинающиеся с /books, будут проксироваться к микросервису books, который работает на порту 3001.
|
||||||
|
|
||||||
|
### Шаги для запуска:
|
||||||
|
Переходим в корневую папку всего решения и пишем команду:
|
||||||
|
```
|
||||||
|
docker-compose up --build
|
||||||
|
```
|
||||||
|
|
||||||
|
> Видео демонстрация работы
|
||||||
|
https://cloud.mail.ru/public/hLWs/iuqweU92e
|
@ -6,16 +6,31 @@ services:
|
|||||||
context: ./authors
|
context: ./authors
|
||||||
ports:
|
ports:
|
||||||
- "3000:3000"
|
- "3000:3000"
|
||||||
|
networks:
|
||||||
|
- app-network
|
||||||
|
|
||||||
books:
|
books:
|
||||||
build:
|
build:
|
||||||
context: ./books
|
context: ./books
|
||||||
ports:
|
ports:
|
||||||
- "3001:3001"
|
- "3001:3001"
|
||||||
|
networks:
|
||||||
|
- app-network
|
||||||
|
depends_on:
|
||||||
|
- authors
|
||||||
|
|
||||||
nginx:
|
nginx:
|
||||||
image: nginx:latest
|
image: nginx:latest
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
volumes:
|
volumes:
|
||||||
- ./nginx.conf:/etc/nginx/nginx.conf
|
- ./nginx.conf:/etc/nginx/nginx.conf
|
||||||
|
depends_on:
|
||||||
|
- authors
|
||||||
|
- books
|
||||||
|
networks:
|
||||||
|
- app-network
|
||||||
|
|
||||||
|
networks:
|
||||||
|
app-network:
|
||||||
|
driver: bridge
|
||||||
|
@ -16,10 +16,16 @@ http {
|
|||||||
|
|
||||||
location /authors {
|
location /authors {
|
||||||
proxy_pass http://authors_service;
|
proxy_pass http://authors_service;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
location /books {
|
location /books {
|
||||||
proxy_pass http://books_service;
|
proxy_pass http://books_service;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user